Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graph Gremlin,获取两个顶点,它们彼此都有一条边_Graph_Gremlin_Amazon Neptune - Fatal编程技术网

Graph Gremlin,获取两个顶点,它们彼此都有一条边

Graph Gremlin,获取两个顶点,它们彼此都有一条边,graph,gremlin,amazon-neptune,Graph,Gremlin,Amazon Neptune,假设你有2000人,他们可以选择喜欢某个人,这在他们之间创造了一种优势,例如A喜欢B,现在这并不一定意味着B喜欢A。我该如何编写一个小精灵查询来找出每个喜欢彼此的人?A喜欢B,B喜欢A 我在互联网上四处寻找,发现了。两者都是('likes'),但据我所知,这会让每个喜欢某个人或拥有某个人的人都喜欢他们,而不是同时两者都喜欢 我也发现了这个 g.V().hasId('1234567').as('y'). out('likes'). where(__.in('likes').as('y'))

假设你有2000人,他们可以选择喜欢某个人,这在他们之间创造了一种优势,例如A喜欢B,现在这并不一定意味着B喜欢A。我该如何编写一个小精灵查询来找出每个喜欢彼此的人?A喜欢B,B喜欢A

我在互联网上四处寻找,发现了
。两者都是('likes')
,但据我所知,这会让每个喜欢某个人或拥有某个人的人都喜欢他们,而不是同时两者都喜欢

我也发现了这个

g.V().hasId('1234567').as('y').
  out('likes').
  where(__.in('likes').as('y'))
这适用于一个人,但我不知道如何让它适用于多人

对我来说,这似乎是一个足够简单的图形问题,但我似乎找不到任何在线解决方案。从我读到的所有东西来看,似乎推断数据的结构应该是这样的,如果A喜欢B,这也意味着B喜欢A。这是可以实现的,当你创建A喜欢B的边时,你可以检查B是否已经喜欢A,如果是这样的话,插入一个特殊的边,就像。。。A与B的关系

对此的查询将是
g.V()。两者('inRelationshipWith')
,这将使事情变得更简单


这是数据结构的问题吗?我可能会错误地使用图形数据库,还是有一种简单的方法可以实现我想要的东西,而我却缺少了它?

你几乎做到了。记住,从另一个顶点返回到起始顶点的关系也是从该顶点的角度来看的
out
关系。下面的查询使用AirRoutes数据集查找在两个方向上都有路线的所有机场(类似于您的相互友谊案例)

这将返回成对的关系。它将包括每个机场(朋友)两次,例如:

[a:DFW,b:AUS]
[a:AUS,b:DFW]
如果只需要每对中的一对,则添加一个
重复数据消除
步骤会将结果集减少为每对关系仅一对

 g.V().
   hasLabel('airport').as('a').
   out().as('b').
   where(out().as('a')).
   select('a','b').
     by('code').
   order(local).
     by(values).
   dedup().
     by(values) 
查找相反的情况(不存在相互关系)只是向查询中添加
not
步骤

g.V().
  hasLabel('airport').as('a').
   out().as('b').
   where(__.not(out().as('a'))).
   select('a','b').
     by('code')  

另一个可能的解决办法是:

g.V().as('y').
  out('likes').where(__.out('likes').as('y')).
  path().dedup().
    by(unfold().
      order().by(id).
      dedup().fold())
您可以在下面的示例图中进行尝试:

我在另一个选项卡上打开了你的书,我觉得我应该仔细阅读
g.V().as('y').
  out('likes').where(__.out('likes').as('y')).
  path().dedup().
    by(unfold().
      order().by(id).
      dedup().fold())