2017-08-29 185 views
0

我只是在使用图形API Cosmos DB ,它使用Gremlin语法进行查询。Gremlin查询获取给定顶点的边缘和边缘

我在图中有许多用户(顶点),并且每个用户都有'知道'属性给其他用户。其中一些出边(outE),另一些边(inE)取决于关系的创建方式。 我现在试图创建一个查询,它将返回给定用户(顶点)的所有'知道'关系。 我可以很容易地通过获得任何INE或欧特的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,但我不知道提前,这是否是或缩小边缘,所以想得到两者(例如,如果用户具有“知道”标签的进出边缘)。 我已经使用投影和OR运算符和东西例如为:

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

,但它不是让我回到我想要的数据的各种组合尝试。

我想要的所有内容都是对所有inE和outE的Id的列表,它们对于给定顶点具有“知道”标签。

还是有一个更简单/更好的方式来模拟双向关联,如'知道'或'friendOf'?

感谢

回答

5

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

+0

太棒了。结合otherV(),我可以得到每个知道或知道的顶点,这正是我想要的。因为它没有在TinkerPop ToC中列出,所以甚至不知道它们是否存在:http://tinkerpop.apache.org/docs/current/reference!谢谢 – LDJ

+3

你也可以使用'both'来获得你想要的顶点。 http://tinkerpop.apache.org/javadocs/current/core/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.html#both-java.lang.String...- – pantalohnes

+0

更好!谢谢。 – LDJ