2015-02-18 5 views
0

Я в ситуации, когда мне нужно получить два разных типа вершин, используя один запрос. Например, предположим, что граф имеет следующую структуру:Как получить несколько вершин/ребер в одном запросе гремлина?

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

Предположим, что узлы имеют следующие свойства:

  1. Членство
    • статус
    • Дата
  2. Группа
    • имя
    • Дата
    • типа

Теперь, мне нужно, чтобы получить все Membership узлы, которые пользователь is_member из, наряду с соответствующим Group «ы name. Как написать запрос Gremlin для этого?

Я использую рамки ламп. Как сохранить результат в объекте python?

+0

Вы уверены, что вам нужен узел для 'Членства'? ... для меня это скорее похоже на тип края. Вы также можете иметь свойства по краям. – Faber

+0

@Faber Я чувствовал, что добавление «членства» в качестве узла может помочь мне позже сделать интересные отношения, например, нравится тот факт, что пользователь является членом группы, комментируя ее и т. Д. – Kevin

ответ

1

Следующий запрос дает вам пользователю u1 карту с key = Membership-Node с и value = 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)

+0

Итак, я предполагаю, что возвращенный Значение в Python с использованием Bulbs является генератором словаря, правильно? – Kevin

+0

Может быть, что-то вроде генератора пар ключ-значение? ... Я никогда не использовал пульпы, извините. http://bulbflow.com/docs/api/bulbs/gremlin/ – Faber