像 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
- 基本上我想做一个左外连接。 但是,如果我也有 Country
和 from
数据,查询 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 脚本,这样可以更轻松地尝试更直接地回答您的具体问题。
我在下面写了一个简单的查询来遍历个人到国家,但没有return任何结果。
g.V().hasLabel("Person").as("p").out("from").hasLabel("Country").as("c").select("p", "c")
在实际数据中,只有Person
个顶点,不存在Country
个顶点或from
条边。我预计至少 return p
- 基本上我想做一个左外连接。 但是,如果我也有 Country
和 from
数据,查询 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 脚本,这样可以更轻松地尝试更直接地回答您的具体问题。