订单(T.decr)未按预期工作

时间:2014-10-13 10:06:06

标签: gremlin

以下查询按预期工作。

gremlin> g.V[0].outE.as('e').select{it.timestamp}
==>[e:1]
==>[e:3]

然而,当引入订单(T.decr)时,结果对我来说没有意义。边缘[e:1]去了哪里?

gremlin> g.V[0].outE.as('e').order(T.decr).select{it.timestamp}
==>[e:3]
==>[e:3]

这是gremlin中的错误还是我做错了什么?

2 个答案:

答案 0 :(得分:1)

我假设你想要一个按边缘属性排序的边缘列表。在tinkergraph玩具图中,我们可以使用weights属性并按权重对边进行排序:

g = TinkerGraphFactory.createTinkerGraph()
r = g.V[2].outE.order{it.b.weight<=>it.a.weight}.toList()

输出:

r.each{println "$it: ${it.weight}"}
e[8][1-knows->4]: 1.0
e[7][1-knows->2]: 0.5
e[9][1-created->3]: 0.4

或者,如果您想获得已排序边的特定属性,只需附加属性名称,例如:边缘标签:

g.V[2].outE.order{it.b.weight<=>it.a.weight}.label

答案 1 :(得分:1)

好的,所以我需要移动.as(&#39; e&#39;)语句,使其在order()语句之后,这就是我没有得到正确结果的原因。

同样,当Faber指出我需要使用糟糕的{it.b.timestamp&lt; =&gt; it.a.timestamp}语法来指定我想要排序的属性。不确定为什么没有订单(&#39; property&#39;,T.decr)选项。

g.V[0].outE.order{it.b.timestamp<=>it.a.timestamp}.as('e').select{it.timestamp}
==>[e:3]
==>[e:1]