使用gremlin显示前2个单独的节点

时间:2013-09-23 11:32:21

标签: neo4j gremlin

假设我有节点/边:

A --> M  300
A --> B  100
A --> C  200
B --> D  300
B --> E  200
B --> L  1300

我将源节点作为A,B传递,然后如何显示以金额和限制按2

排序的以下输出
A --> M 300
A --> C 200

B --> L 1300
B --> D  300 

1 个答案:

答案 0 :(得分:0)

我将假设你知道如何过滤顶点“A”和“B”并开始遍历:

gremlin> g = new TinkerGraph()
==>tinkergraph[vertices:0 edges:0]
... 
gremlin> g.v("A","B").outE.groupBy{it.outV.next()}{[it.amount,it.inV.next()]}.cap.next()
==>v[A]=[[200, v[C]], [100, v[B]], [300, v[M]]]
==>v[B]=[[300, v[D]], [1300, v[L]], [200, v[E]]]

所以上面的内容为您提供了所有“A”和“B”元素与其“金额”分组(不确定该数字在您的域中代表什么)。一旦你有了,只需使用“减少”闭包来排序和弹出列表中的前两个项目:

gremlin> g.v("A","B").outE.groupBy{it.outV.next()}{[it.amount,it.inV.next()]}{it.sort{a,b->b[0]<=>a[0]}[0..<2]}.cap.next()
==>v[A]=[[300, v[M]], [200, v[C]]]
==>v[B]=[[1300, v[L]], [300, v[D]]]