Gremlin查询:判断值是否存在于key()步骤生成的属性键列表
Gremlin 多条件关联匹配查询方案
匹配规则
- 图中存在一类携带
title属性的顶点 - 部分顶点的出边包含多组自定义属性
- 命中规则:待匹配顶点的
title属性值,存在于关联出边的属性键集合中
对应示例匹配逻辑:alice指向bob的边携带属性lebron: basketball,则bob出边指向的、title取值为lebron的player顶点为命中结果。
测试图初始化代码
g.addV('person').property(id, 'bob') g.addV('person').property(id, 'alice').addE().to(__.V('bob')).property('lebron', 'basketball') g.addV('player').property('title', 'lebron').addE().from(__.V('bob'))
原查询错误点
- 语句末尾多了1个多余右括号,存在基础语法错误
within('k')写法是直接匹配字符串常量k,没有引用前序步骤中别名k存储的边属性键集合- 缺少值关联逻辑,无法将前序收集的边属性键,和后续遍历到的顶点
title值做比对
修正后可运行查询
g.V('alice') .outE().as('relatedEdge') .inV().hasId('bob').as('midVertex') .select('relatedEdge') .properties().key() .fold().as('edgePropKeys') .select('midVertex') .out().as('matchTarget') .where( values('title').as('t'), select('edgePropKeys').unfold().as('k'), eq('t') ) .select('matchTarget') .valueMap('title') .toList()
该写法兼容TinkerGraph、JanusGraph等主流Gremlin图实现,无版本兼容问题。基于上述测试数据运行后,返回结果为
[{title: ["lebron"]}],符合预期。
内容的提问来源于stack exchange,提问作者Kyano
相关产品推荐
相关产品推荐

