在Gremlin查询闭包中检索单个属性值有效,但检索valueMap()失败会产生异常

时间:2017-02-21 14:17:47

标签: titan gremlin tinkerpop3

使用Titan 1.0.0 Gremlin shell我可以从闭包内的边缘检索单个属性值。但尝试访问valueMap()失败,但有例外。

使用:

gremlin> t.E().hasLabel("TRUSTS").has('NOT_VALID_BEFORE').each( { trustEdge -> t.E().has('EDGE_GROUP_ID', trustEdge.value('EDGE_GROUP_ID')).hasNot('NOT_VALID_BEFORE').each({println it.value('EDGE_ID')}) } )

收益率异常(唯一的区别在于最右边的关闭'it.valueMap()'vs'it.value('..')'):

gremlin> t.E().hasLabel("TRUSTS").has('NOT_VALID_BEFORE').each( { trustEdge -> t.E().has('EDGE_GROUP_ID', trustEdge.value('EDGE_GROUP_ID')).hasNot('NOT_VALID_BEFORE').each( { println it.valueMap() } ) } )
No signature of method: com.thinkaurelius.titan.graphdb.relations.StandardEdge.valueMap() is applicable for argument types: () values: []
Possible solutions: value(java.lang.String)
Display stack trace? [yN]
gremlin> 

但一般情况下,我无法进入边缘的valueMap:

gremlin> t.E().hasLabel("TRUSTS").has('NOT_VALID_BEFORE').each( { trustEdge -> t.E().has('EDGE_GROUP_ID', trustEdge.value('EDGE_GROUP_ID')).hasNot('NOT_VALID_BEFORE').each( { println it } ) } )
e[215rmh-oe094-1d05-9i0][40964296-MANAGED->12312]
gremlin> t.E('215rmh-oe094-1d05-9i0').valueMap()
==>[MANAGE_INFORM:false, NOT_VALID_AFTER:1669873006000, MANAGE_MANAGERS:false, MANAGE_AUTHENTICATION_MEANS:true, CREATED_AT:1487683094863, RELATIONSHIP_ROLE:FAMILY_DOCTOR, MANAGE_TRUST:true, UPDATED_AT:1487683094915, MANAGE_REPRESENTATION:false, EDGE_ID:122881049, VERIFIED:true, EDGE_GROUP_ID:122881049]

这是一个错误还是我在这里做错了什么?

一个小小的上下文,以防查询甚至没有按照我的想法做到: 我认为我在这里做的是查找具有属性NOT_VALID_BEFORE的标签“TRUSTS”的所有边缘。对于每个边缘,我查找共享相同边缘组ID值的所有边缘,并检查它们是否还具有属性NOT_VALID_BEFORE,将它们打印到没有设置属性的控制台。

1 个答案:

答案 0 :(得分:2)

当您开始使用each()进行迭代时,您在闭包内操作的每个项目都是“离开遍历” - 也就是说,您正在使用Edge对象,而不是{{1对象。

EdgeGraphTraversal方法类似于value(),但它没有GraphTraversal方法。您可以改用ElementHelper.propertyValueMap()

这是一个简单的例子:

valueMap()