像 gremlin 查询这样的简单外连接不返回任何结果

Simple outer-join like gremlin query not returning any results

我在下面写了一个简单的查询来遍历个人到国家,但没有return任何结果。

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

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

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

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

我是 运行 这些针对 Datastax Enterpise Graph 的查询。

知道为什么 return 没有结果吗?

您得到的结果符合预期。如果没有 "from" 条边,那么遍历器基本上就死了,不再继续前进。也许你可以考虑使用 project():

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

使用 TinkerPop 中的 "modern" 玩具图,输出如下所示:

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 脚本,这样可以更轻松地尝试更直接地回答您的具体问题。