使用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,将它们打印到没有设置属性的控制台。
答案 0 :(得分:2)
当您开始使用each()
进行迭代时,您在闭包内操作的每个项目都是“离开遍历” - 也就是说,您正在使用Edge
对象,而不是{{1对象。
Edge
的GraphTraversal
方法类似于value()
,但它没有GraphTraversal
方法。您可以改用ElementHelper.propertyValueMap()
。
这是一个简单的例子:
valueMap()