【发布时间】:2013-09-23 11:32:20
【问题描述】:
假设我有节点/边:
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
【问题讨论】:
假设我有节点/边:
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
【问题讨论】:
我假设您知道如何过滤顶点“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”元素及其“数量”(不确定该数字在您的域中代表什么)。完成后,只需使用“reduce”闭包对列表中的前两项进行排序和弹出:
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]]]
【讨论】:
it.sort{a,b->b[0]<=>a[0]}.take(2)