2015-08-31 3 views
1

скажет, у вас есть следующие отношения:Gremlin, в том числе вершин с нулевыми краями

Author-----wrote---->Article 

и вы хотите подготовить отчет о каждом авторе и сколько статей он писал и дата его последнюю статью, proplem появляется, когда есть авторы, которые не писали ни одной статьи, они будут удалены при передаче «написано», и я хочу включить их с «0» в столбец «count» и «N/A» в столбце «дата» , поэтому мой вопрос - как решить эту проблему?

ответ

2

Я предполагаю, что вы все еще работаете с TinkerPop 2.x с учетом использования OrientDB, поэтому я отвечу таким образом. Вам нужно сделать что-то вроде:

gremlin> g = new TinkerGraph()       
==>tinkergraph[vertices:0 edges:0] 
gremlin> bill = g.addVertex([author:'bill',type:'author']) 
==>v[0] 
gremlin> amy = g.addVertex([author:'amy',type:'author']) 
==>v[1] 
gremlin> book1 = g.addVertex([book:1,type:'book'])   
==>v[2] 
gremlin> book2 = g.addVertex([book:2,type:'book'])   
==>v[3] 
gremlin> bill.addEdge('wrote',book1)      
==>e[4][0-wrote->2] 
gremlin> bill.addEdge('wrote',book2) 
==>e[5][0-wrote->3] 
gremlin> g.V.has('type','author').transform{[it, it.outE('wrote').count()]} 
==>[v[0], 2] 
==>[v[1], 0] 
+0

Я нашел другое решение, я использовал трубу «copySplit» разделить трубу на 2 трубы, один, который получает вершины, без ребер, а другой получает вершины с одним или несколькими затем объединил их, но я думаю, что ваш ответ лучше, так как я думаю, что в скопированном расколотом трубе каждая вершина пересматривается для каждого скопированного канала, правильно ли я это предположение? – DrAhmedJava

+0

Да - это правильно, плюс 'copySplit' не всегда хорошо работает в TinkerPop 2.x. Шаг 'union' в 3.x работает намного лучше: http://tinkerpop.incubator.apache.org/docs/3.0.0-incubating/#union-step –

Смежные вопросы