如何用Gremlin获取至少有一个邻接点的顶点?我的filter用法是否错误?
我尝试用filter步骤获取标签为Customer、Loan、Account、CreditCard且至少有一个邻接点的所有顶点,但执行报错。请问我是不是错误使用了filter函数?相关Gremlin语句如下:
g.V().hasLabel("Customer", "Loan", "Account", "CreditCard").filter(both().hasNext())
问题分析与解决
你的写法确实有误,核心问题是在Gremlin的filter步骤里直接调用了Java的hasNext()方法——filter要求接收一个Gremlin遍历(Traversal)作为判断条件,而不是直接调用终端方法(比如hasNext()),这不符合Gremlin的遍历语法规范,所以会报错。
给你几种正确的实现方式:
- 方法一:通过统计邻接点数量判断
g.V().hasLabel("Customer", "Loan", "Account", "CreditCard").filter(both().count().is(gt(0))) - 方法二:利用遍历存在性的简洁写法
只要g.V().hasLabel("Customer", "Loan", "Account", "CreditCard").filter(both())both()能遍历到至少一个邻接点,当前顶点就会被保留。 - 方法三:用
where替代filter(Gremlin推荐风格)g.V().hasLabel("Customer", "Loan", "Account", "CreditCard").where(both())
以上三种写法都能实现你需要的效果:筛选出指定标签且存在至少一个邻接点的顶点。
内容的提问来源于stack exchange,提问作者zjffdu
相关产品推荐
相关产品推荐

