如何在单个gremlin查询中获取多个顶点/边?

时间:2015-02-18 11:59:52

标签: titan gremlin bulbs

我处于需要使用单个查询获取两种不同类型顶点的情况。例如,假设图形具有以下结构:

Node("User")--Edge("is_member")-->Node("Membership")--Edge("is_member")-->Node("Group")

假设节点具有以下属性:

  1. 会员
    • 状态
    • 日期
    • 名称
    • 日期
  2. 现在,我需要获取用户Membership的所有is_member个节点以及相应的Group' s name。如何为此编写Gremlin查询?

    我正在使用Bulbs框架。如何将结果存储在python对象中?

1 个答案:

答案 0 :(得分:1)

以下查询为用户u1提供了一张包含key = Membership-Nodevalue = list of group names of the key membership node的地图:

m=[:];u1.out('is_member').groupBy(m){it}{it.out('is_member').name}

输出是:

gremlin> m
==>v[m1]=[group1]
==>v[m2]=[group2, group3]

这里使用的样本图:

g = new TinkerGraph()
u1 = g.addVertex('u1')
u2 = g.addVertex('u2')
m1 = g.addVertex('m1')
m2 = g.addVertex('m2')
g1 = g.addVertex('g1')
g2 = g.addVertex('g2')
g3 = g.addVertex('g3')

g.addEdge(u1, m1, 'is_member')
g.addEdge(u1, m2, 'is_member')
g.addEdge(u2, m2, 'is_member')
g.addEdge(m1, g1, 'is_member')
g.addEdge(m2, g2, 'is_member')
g.addEdge(m2, g3, 'is_member')

g1.name = 'group1'
g2.name = 'group2'
g3.name = 'group3'

另请参阅:How do I write a sub-query?

(用gremlin2测试)