Gremlin 获取存在双向边连接的顶点
Gremlin get vertices where there exists a bidirectional edge connecting them
我的是一个简单的社交网络场景,人们可以交朋友和 post 图片,只有当它们之间存在双向关系时,这些图片才应该对人们可见
g.addV("user").property("name","X").as('x').
addV("user").property("name","Y").as('y').
addV("post").property("name","p1").as('p1').
addE("posts").from("x").to("p1").
addE("friend").from("x").to("y").iterate()
现在 X 和 Y 之间只存在单向关系。只有存在双向关系时,Y 才应该看到 X 的 posts,即
g.addE("friend").from(V().has("name","Y")).to(V().has("name","X")).iterate()
现在 X 和 Y 之间有相同类型的双向边,因此两者可以相互查看 posts。
我的代码获取 Y 的所有朋友的 posts 但不起作用
g.V("name","Y").both("friend").out("posts").toList().next();
一种更直接的写法是:
g.V().has("name","Y").as('y').
out('friend').
where(__.in('friend').as('y')).
out('posts').values('name')
所以,找到"Y"并将该步骤标记为"y",然后遍历朋友,过滤掉所有"friend"不匹配回"y"的顶点使用 where()
然后对于那些匹配项获取帖子。
gremlin> g.addV("user").property("name","X").as('x').
......1> addV("user").property("name","Y").as('y').
......2> addV("post").property("name","p1").as('p1').
......3> addE("posts").from("x").to("p1").
......4> addE("friend").from("x").to("y").iterate()
gremlin> g.V().has("name","Y").as('y').
......1> out('friend').
......2> where(__.in('friend').as('y')).
......3> out('posts').values('name')
gremlin> g.addE("friend").from(V().has("name","Y")).to(V().has("name","X")).iterate()
gremlin> g.V().has("name","Y").as('y').
......1> out('friend').
......2> where(__.in('friend').as('y')).
......3> out('posts').values('name')
==>p1
我的是一个简单的社交网络场景,人们可以交朋友和 post 图片,只有当它们之间存在双向关系时,这些图片才应该对人们可见
g.addV("user").property("name","X").as('x').
addV("user").property("name","Y").as('y').
addV("post").property("name","p1").as('p1').
addE("posts").from("x").to("p1").
addE("friend").from("x").to("y").iterate()
现在 X 和 Y 之间只存在单向关系。只有存在双向关系时,Y 才应该看到 X 的 posts,即
g.addE("friend").from(V().has("name","Y")).to(V().has("name","X")).iterate()
现在 X 和 Y 之间有相同类型的双向边,因此两者可以相互查看 posts。
我的代码获取 Y 的所有朋友的 posts 但不起作用
g.V("name","Y").both("friend").out("posts").toList().next();
一种更直接的写法是:
g.V().has("name","Y").as('y').
out('friend').
where(__.in('friend').as('y')).
out('posts').values('name')
所以,找到"Y"并将该步骤标记为"y",然后遍历朋友,过滤掉所有"friend"不匹配回"y"的顶点使用 where()
然后对于那些匹配项获取帖子。
gremlin> g.addV("user").property("name","X").as('x').
......1> addV("user").property("name","Y").as('y').
......2> addV("post").property("name","p1").as('p1').
......3> addE("posts").from("x").to("p1").
......4> addE("friend").from("x").to("y").iterate()
gremlin> g.V().has("name","Y").as('y').
......1> out('friend').
......2> where(__.in('friend').as('y')).
......3> out('posts').values('name')
gremlin> g.addE("friend").from(V().has("name","Y")).to(V().has("name","X")).iterate()
gremlin> g.V().has("name","Y").as('y').
......1> out('friend').
......2> where(__.in('friend').as('y')).
......3> out('posts').values('name')
==>p1