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

我的第一个想法是,在合并空查询结果时,ether
union
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"))