给定一个顶点,使用Gremlin查询获取其入边和出边。

5

我正在使用Cosmos DB中的Graph API进行操作,其使用Gremlin语法进行查询。

我有许多用户(Vertex)在图形中,每个用户都有“知道”其他用户的属性。这些关系有些是出边(outE),而有些则是入边(inE),这取决于关系是如何创建的。

现在我想创建一个查询,以返回给定用户(Vertex)的所有“知道”关系。我可以通过以下方式轻松获取inE或outE的ID:

g.V('7112138f-fae6-4272-92d8-4f42e331b5e1').inE('knows') 
g.V('7112138f-fae6-4272-92d8-4f42e331b5e1').outE('knows') 

这里的'7112138f-fae6-4272-92d8-4f42e331b5e1'是我正在查询的用户的id,但我事先不知道这是一个入边还是出边,所以想要获取两者(例如,如果该用户具有与“knows”标签相关的入边和出边)。 我尝试使用投影和OR运算符以及各种组合,例如:

g.V('7112138f-fae6-4272-92d8-4f42e331b5e1').where(outE('knows').or().inE('knows'))

但它没有给我返回我想要的数据。
我只想要一个列表,其中包含所有具有标签“knows”的inE和outE的Id,针对给定的顶点。
还有一种更简单/更好的建模双向关联(如“知道”或“朋友”)的方法吗?
谢谢。
1个回答

14

在这种情况下,您可以使用bothE步骤。 g.V('7112138f-fae6-4272-92d8-4f42e331b5e1')。bothE('knows')


1
太棒了。这个结合 otherV() 方法,让我可以获取所有认识这个 Vertex 或者被这个 Vertex 认识的 Vertex,这正是我想要的。我甚至不知道 bothE 存在,因为它没有列在 TinkerPop ToC 中:http://tinkerpop.apache.org/docs/current/reference!谢谢! - LDJ
4
你也可以使用both来获取你想要的顶点。http://tinkerpop.apache.org/javadocs/current/core/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.html#both-java.lang.String...- - pantalohnes
更好了!谢谢。 - LDJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接