通过Gremlin查询返回节点的属性子集

时间:2012-05-06 20:06:41

标签: gremlin

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

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

4 个答案:

答案 0 :(得分:0)

您是否看过使用Table ??

示例来自: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]

答案 1 :(得分:0)

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

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

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

答案 2 :(得分: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}

答案 3 :(得分:0)

可以执行this

如果数据是:

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}