Gremlin中where谓词是否支持边属性间的算术运算?
Gremlin支持边属性的算术运算过滤
当然可以,Gremlin完全支持对多条边的属性执行算术运算来过滤结果,不需要局限于简单的比较操作。下面给你两种常用的实现方式:
方式一:使用原生math() + where()步骤(推荐)
这种方式是Gremlin的原生语法,兼容性最好,适用于所有支持TinkerPop 3.x的图数据库:
g.V(1).outE().has('weight', 1.0).as('firstEdge') .inV().outE().as('secondEdge') .where(math('secondEdge.weight - firstEdge.weight').is(gt(0.2)))
math()步骤可以直接引用通过as()标记的元素属性,支持加减乘除、幂运算、取模等多种算术操作- 运算结果通过
is()结合gt()(大于)、lt()(小于)等比较器完成过滤逻辑
方式二:使用Lambda表达式(按需选择)
如果你的Gremlin环境支持Lambda(比如Groovy、Java环境),也可以直接在filter()里写算术判断逻辑:
g.V(1).outE().has('weight', 1.0).as('firstEdge') .inV().outE().as('secondEdge') .filter { secondEdge -> secondEdge.get().value('weight') - it.get().value('weight') > 0.2 }
- 注意:Lambda表达式的兼容性较差,部分图数据库(如Neo4j的Gremlin插件)可能不支持,优先推荐第一种原生步骤的写法
内容的提问来源于stack exchange,提问作者jiamo
相关产品推荐
相关产品推荐

