我想知道如何有一个以嵌套格式返回结果的gremlin查询。假设有如下属性图:
USER
和PAGE
个顶点,其中包含AGE
USER
顶点等属性的某些属性;
FOLLOW
和USER
之间的 PAGE
边缘;
我正在寻找一个有效的查询,它可以为所有年龄超过20岁的用户提供所有跟随的用户。我可以使用来自应用程序端的简单循环来执行此操作,并且每次迭代都使用简单的遍历查询。不幸的是,这样的解决方案对我来说效率不高,因为它会产生大量查询,在这种情况下网络延迟可能会很大。
答案 0 :(得分:5)
不确定您对"高效"的定义是的,但请记住,这是一个典型的OLAP用例,你不应该期望快速的OLTP实时响应。
也就是说,查询应该如下:
g.V().has("USER", "AGE", gt(20)).as("user").
map(out("FOLLOW").fold()).as("pages").
select("user", "pages")
使用现代样本图的一个小例子:
gremlin> g = TinkerFactory.createModern().traversal().withComputer()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], graphcomputer]
gremlin> g.V().has("person", "age", gt(30)).as("user").
map(out("created").fold()).as("projects").
select("user","projects")
==>[user:v[6], projects:[v[3]]]
==>[user:v[4], projects:[v[5], v[3]]]
答案 1 :(得分:0)
这很容易:
g.V().label('user').has('age',gt(20))
.match(__.as('user').out('follows').as('page'))
.select('user','page')
当您在gremlin中使用此查询时,只需注意,gremlin会为您提供空指针异常,您可以在代码中使用它并检查“页面”是否存在。