格林姆林:极限步与迈步

时间:2019-07-03 04:26:06

标签: graph-databases gremlin

我是gremlin的新手,在访问this网站时,我遇到了take()步骤。它的输出与limit()相同,这使我想知道两者之间有什么区别。我对此事找不到任何澄清。谢谢!

2 个答案:

答案 0 :(得分:5)

不幸的是,这有点令人困惑。 take()不是Gremlin步骤。而是将Groovy函数应用于遍历的末尾(其本身是Iterator)。与遍历结束时可以使用take()的方式几乎相同,可以使用其他Groovy函数:

gremlin> g.V().take(1)
==>v[1]
gremlin> g.V().collect{it.value('name')}
==>marko
==>vadas
==>lop
==>josh
==>ripple
==>peter

当然,一旦使用Groovy函数处理管道,就无法返回Gremlin步骤:

gremlin> g.V().take(1).out()
No signature of method: org.codehaus.groovy.runtime.DefaultGroovyMethods$TakeIterator.out() is applicable for argument types: () values: []
Possible solutions: sum(), sort(), sort(groovy.lang.Closure), sort(java.util.Comparator), count(java.lang.Object), count(groovy.lang.Closure)
Type ':help' or ':h' for help.
Display stack trace? [yN]

这就是为什么您希望使用limit(1)

gremlin> g.V().limit(1).out()
==>v[3]
==>v[2]
==>v[4]

当然,如果您不使用Groovy并在Java环境中进行编程,那么显然take()和其他此类功能将不可用。

答案 1 :(得分:0)

应该使用limit()步骤,从TinkerPop 3.4开始,这是迭代Traversal并检索第一个n元素的规范方法。

我不记得为什么在撰写本文时take()实例上有Traversal可用。这对我来说听起来有些奇怪。可能是Iterator(或类似情况)的接口泄漏,但是如果维护人员阅读此问题,我将让他们对此发表评论。

使用limit()会很安全。