11

这是您可以使用 Gremlin 对 Neo4j 图表中的结果进行排序(排序)的方式:

g.v(id).out('knows').sort{it.name}

或者

g.v(id).out('knows').sort{a,b -> a.name <=> b.name}

这是如何使用偏移/跳过和限制来限制结果:

g.v(id).out('knows')[0..9]

但是,如果您结合排序和限制

g.v(id).out('knows').sort{it.name}[0..9]

它会抛出一个错误......

javax.script.ScriptException: groovy.lang.MissingMethodException: No signature of method: java.util.ArrayList$ListItr.getAt() is applicable for argument types: (groovy.lang.IntRange) values: [0..9]
Possible solutions: getAt(java.lang.String), getAt(int), next(), mean(), set(java.lang.Object), putAt(java.lang.String, java.lang.Object)
4

2 回答 2

15

我花了一段时间才弄清楚,像sort这样的原生 Groovy 方法不会返回 Pipes,而是返回迭代器、可迭代对象等。因此,要将其中一个对象转换回 Pipeline 流,您需要使用_()

g.v(id).out('knows').sort{it.name}._()[0..9]
于 2012-04-28T20:47:05.057 回答
0

我有类似的问题,但有except(sth).unique()和限制[0..5]。就我而言:

错误:

except(xxx).unique()[0..5]

工作正常:

except(sth).unique().findAll()[0..5]

也适用于 sort{}:

.unique().findAll().sort{it.sth}[0..5]

(Alexei Tenitski 的回答也很好)

于 2013-03-28T16:50:08.727 回答