我是gremlin的新手,在访问this网站时,我遇到了take()
步骤。它的输出与limit()
相同,这使我想知道两者之间有什么区别。我对此事找不到任何澄清。谢谢!
答案 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()
会很安全。