以下查询按预期工作。
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中的错误还是我做错了什么?
答案 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]