Gremlin 小精灵:使用标识获取联合的空结果
我正在执行以下查询,该查询返回一个空列表:Gremlin 小精灵:使用标识获取联合的空结果,gremlin,Gremlin,我正在执行以下查询,该查询返回一个空列表: g .V("user-11") .outE("validate_phone") .union(__.identity(), __.V().hasId("phone-29e78c7c18a8bb33c608dbc233bc155e")) .toList() 这很奇怪,因为phone-29e78c7c18a8bb33c608dbc233bc155e是图中的有效节点 为了解
g
.V("user-11")
.outE("validate_phone")
.union(__.identity(), __.V().hasId("phone-29e78c7c18a8bb33c608dbc233bc155e"))
.toList()
这很奇怪,因为phone-29e78c7c18a8bb33c608dbc233bc155e
是图中的有效节点
为了解决这个问题,我意识到节点user-11
没有边缘validate\u phone
,这似乎会导致问题,我尝试使用另一个节点,该节点的identity()
函数将生成一个非空列表,并发现在这种情况下v[phone-29e78c7c18a8bb33c608dbc233bce]
返回
换句话说
g.V("user-11").outE("validate_phone").toList() // returns an empty list
g.V("user-347883719").outE("validate_phone").toList() // returns a non empty list
及
我的第一个想法是,在合并空查询结果时,etherunion
或identity
的行为不符合预期,但我可能遗漏了一些东西
任何帮助都将不胜感激 如果你能描绘出执行遍历步骤的小精灵,这会很有帮助 这就是为什么下面的遍历没有返回任何结果
g.V("user-11").outE("validate_phone").union(__.identity(), __.V().hasId("phone-29e78c7c18a8bb33c608dbc233bc155e"))
g.V(“user-11”)
在V[user-11]上放置一个小精灵outE(“验证电话”)
要求这个小精灵移动到传出的“验证电话”边缘。由于当前顶点没有传出的“validate_phone”边,小精灵无法执行该步骤并死亡。没有小精灵可以执行
union
步骤。因此,遍历返回一个空结果
你的另一次穿越
g.V("user-347883719").outE("validate_phone").union(__.identity(), __.V().hasId("phone-29e78c7c18a8bb33c608dbc233bc155e"))
不会返回结果,因为小精灵可以执行outE
步骤并且不会死亡
这是一个遍历,无论您的用户顶点是否有传出的“validate_phone”边,它都将始终返回一个结果
g.V("user-11").union(__.outE("validate_phone"), __.V().hasId("phone-29e78c7c18a8bb33c608dbc233bc155e"))
g.V(“user-11”)
在V[user-11]上放置一个小精灵union
步骤要求这个小精灵产生两个小精灵。第一个子小精灵将执行第一次嵌套遍历
outE(“validate\u phone”)
。并将返回边缘(如果存在)或死亡。第二个小精灵将执行嵌套遍历
V().hasId(“phone-29e78c7c18a8bb33c608dbc233bc155e”)
,它将返回phone顶点。这很有意义,实际上帮助我理解和重构了代码,非常感谢!谢谢@MarceloRydel!请记住把我的帖子标记为答案。
g.V("user-11").union(__.outE("validate_phone"), __.V().hasId("phone-29e78c7c18a8bb33c608dbc233bc155e"))