如何使用Gremlin对Noe4j结果进行排序和限制?

时间:2012-04-28 20:38:10

标签: sorting graph neo4j gremlin

这是使用Gremlin对Neo4j图表进行排序(排序)的方法:

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

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

这是使用offset / skip和limit限制结果的方法:

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

但是,如果将sort和limit结合起来

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)

2 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:0)

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

ERROR:

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

工作精细:

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

还可以使用sort {}运行FINE:

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

(Alexei Tenitski回答也很好)