Graph Gremlin获取存在双向边连接的顶点

Graph Gremlin获取存在双向边连接的顶点,graph,gremlin,tinkerpop3,amazon-neptune,Graph,Gremlin,Tinkerpop3,Amazon Neptune,我的是一个简单的社交网络场景,人们交朋友并发布图片,只有当他们之间存在双向关系时,这些图片才应该对人们可见 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("

我的是一个简单的社交网络场景,人们交朋友并发布图片,只有当他们之间存在双向关系时,这些图片才应该对人们可见

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的帖子

g.addE("friend").from(V().has("name","Y")).to(V().has("name","X")).iterate()
现在,在X和Y之间有相同类型的双向边,因此两者都可以查看彼此的帖子

我的代码可以获取Y的所有朋友的帖子,但不起作用

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”,然后遍历到好友,使用
where()
过滤掉任何与“Y”不匹配的“好友”顶点,然后为这些匹配获取帖子

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

好的,您将working
where()
子句更改为无效的内容。如果您将其更改回我所拥有的内容,其余内容将正常工作。此外,无需在第二个
by()
modulator中标记
out('posts')
select()
it…
project()
已经引用了它。只需包含一个空的
by()
,它就会像你希望的那样工作。很抱歉……也许你没有遵循我写的内容,请将
where()
的内容更改为我所拥有的内容。这不会影响您获取用户数据的能力。换句话说,这个:
\uuu.in('friend').is(eq('y'))
是错误的,应该是我在
\uuuu.in('friend').as('y')
中所做的。您可以选择是否提出我在上一篇评论中提出的其他建议…无论哪种方式,遍历都应该返回
project()
whoa…抱歉@mmr25在我的示例中似乎有一些错误的剪切/粘贴代码。不确定这是如何发生的。我明白你为什么这么做了。希望现在我的帖子被编辑的更清楚了