简单的外连接,如gremlin查询不返回任何结果

时间:2018-03-08 18:11:28

标签: gremlin tinkerpop datastax-enterprise-graph

我在下面写了一个简单的查询来遍历Person to Country,但它没有返回任何结果。

g.V().hasLabel("Person").as("p").out("from").hasLabel("Country").as("c").select("p", "c")

在实际数据中,只存在Person个顶点,并且不存在Country个顶点或from个边。我预计至少会返回p - 基本上我想做一个左外连接。 但是,如果我还有Countryfrom数据,则查询会返回结果

我使用match尝试了另一个查询,但除非有实际数据,否则仍无结果:

g.V().hasLabel("Person").has("name","bob").match(__.as("p").out("from").hasLabel("Country").as("c")).select("p", "c")

我正在针对Datastax Enterpise Graph运行这些查询。

知道它为什么没有返回结果吗?

1 个答案:

答案 0 :(得分:4)

您获得的结果是预期的。如果没有"来自"然后,移动器基本上死亡并且不再进行任何操作。也许您可以考虑使用project()

g.V().hasLabel("Person").
  project('name','country').
    by('name')
    by(out('from').hasLabel('Country').values('name').fold())

"现代" TinkerPop中的玩具图,输出如下:

gremlin> g.V().hasLabel('person').project('name','knows').by().by(out('knows').values('name').fold())
==>[name:v[1],knows:[vadas,josh]]
==>[name:v[2],knows:[]]
==>[name:v[4],knows:[]]
==>[name:v[6],knows:[]]

将来,当您提交有关Gremlin的问题时,请提供一个可以粘贴到Gremlin控制台的Gremlin脚本,这样可以更轻松地尝试更直接地回答您的具体问题。