有没有办法使用 Gremlin 查询仅返回图形节点的所有属性的子集?
我知道您可以使用转换管道来连接属性值,但我更感兴趣的是获得结构化结果(如 propertyName1 = value1,propertyName2 = value2)。
有没有办法使用 Gremlin 查询仅返回图形节点的所有属性的子集?
我知道您可以使用转换管道来连接属性值,但我更感兴趣的是获得结构化结果(如 propertyName1 = value1,propertyName2 = value2)。
假设您使用的是 Gremlin-Groovy,我发现使用 Groovy 的 each 构造是一种从 Gremlin 查询结果创建我自己的对象的有用方法。例如:
nodes = []
g.V.each{ node ->
nodes += [ propertyName1 : node.value1, propertyName2 : node.value2 ]
}
现在您有一个 Map 对象列表,表示从您的查询返回的节点。这可能不是最有效的方法,但它非常灵活。
从 Gremlin 2.4.0 开始,您可以:
gremlin> g = TinkerGraphFactory.createTinkerGraph()
==>tinkergraph[vertices:6 edges:6]
gremlin> g.v(1).out.map('name')
==>{name=vadas}
==>{name=josh}
==>{name=lop}
gremlin> g.v(1).out.map('name','age')
==>{age=27, name=vadas}
==>{age=32, name=josh}
==>{age=null, name=lop}
你看过使用表吗?
样本来自:Gremlin Wiki
gremlin> t = new Table()
gremlin> g.v(1).out('knows').as('x').out('created').as('y').table(t){it.name}{it.name}
==>v[5]
==>v[3]
gremlin> t
==>[x:josh, y:ripple]
==>[x:josh, y:lop]
这样做是可能的:
如果数据是:
gremlin> g.E.has('weight', T.gt, 0.5f).outV.age
==>32
==>29
然后要做的查询是:
gremlin> g.E.has('weight', T.gt, 0.5f).outV.transform{[id:it.id,age:it.age]}
==>{id=4, age=32}
==>{id=1, age=29}