You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 13:06:25