该行:g.V('1').out('knows').hasId('2').hasNext()
此行在Gremlin控制台中有效。
我尚未阅读Gremlin.NET中不存在hasNext的文档。我是否缺少某些东西,或者在Gremlin.NET中只是有另一种方法可以做到这一点?
答案 0 :(得分:1)
它尚不存在:
https://issues.apache.org/jira/browse/TINKERPOP-1921
主要原因与hasNext()
是Java Iterator
语义(不适用于.NET)有关。像.NET这样的Gremlin语言变体(GLV)在解释语言方面有一定的自由度,以便为使用它的开发人员提供最家的感觉。换句话说,如果您使用的是.NET GLV,那么您应该不会觉得自己在用Java进行编码,而应该感觉像是在用标准的.NET语义编写。
这就是说,正如上面提到的问题那样,可以争辩说,诸如hasNext()
之类的东西是Gremlin作为查询语言的一种常见形式,因此应该在所有GLV中都可用。因此,当我们遇到这些选项时,我们将考虑这些选项。
对于.NET,我猜您会尝试像讨论的here那样检查Current
。
答案 1 :(得分:1)
目前,Gremlin.Net中确实缺少此方法。尽管文档中未明确说明,但文档does list all terminal steps implemented by Gremlin.Net:
- ITraversal.Next()
- ITraversal.NextTraverser()
- ITraversal.ToList()
- ITraversal.ToSet()
- ITraversal.Iterate()
hasNext
也是这样的最终步骤,但是您可以看到它在此列表中丢失。
对于这种情况,我唯一能想到的解决方法是使用count
步骤,然后在您的应用程序中检查返回的计数是否大于零:
var count = g.V("1").Out("knows").HasId("2").Count().Next();
var exists = count > 0;
在某些情况下,限制进入Count
步骤的顶点数量也很有意义,因为您对确切的数量不感兴趣,只想知道是否至少存在一个顶点:>
g.V("1").Out("knows").HasId("2").Limit<Vertex>(1).Count().Next();
这也是此功能的票据中建议的解决方法:TINKERPOP-1921。