3

有没有办法使用 Gremlin 查询仅返回图形节点的所有属性的子集?

我知道您可以使用转换管道来连接属性值,但我更感兴趣的是获得结构化结果(如 propertyName1 = value1,propertyName2 = value2)。

4

4 回答 4

0

假设您使用的是 Gremlin-Groovy,我发现使用 Groovy 的 each 构造是一种从 Gremlin 查询结果创建我自己的对象的有用方法。例如:

nodes = []
g.V.each{ node ->
  nodes += [ propertyName1 : node.value1, propertyName2 : node.value2 ]
}

现在您有一个 Map 对象列表,表示从您的查询返回的节点。这可能不是最有效的方法,但它非常灵活。

于 2013-07-24T08:56:32.860 回答
0

从 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}
于 2013-08-17T14:03:27.407 回答
0

你看过使用表吗?

样本来自: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]
于 2012-05-08T21:02:28.970 回答
0

这样做是可能

如果数据是:

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}
于 2016-06-22T16:04:58.737 回答