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

Gremlin如何对project投影操作的返回结果进行属性过滤?

错误原因

你编写的查询无返回结果的核心问题是Gremlin中valueMap()步骤默认返回的属性值为列表格式(用于兼容多值属性设计),比如city属性值为New York时,你拿到的实际结构是"city": ["New York"],直接和字符串"New York"做相等判断自然无法匹配。


解决方案

方案1(推荐):投影前预过滤

该方案在遍历边阶段就对入顶点的属性做校验,不需要先完成全量投影再过滤,执行效率更高:

g.V().has('id', 1).outE()
        // 提前过滤掉入顶点city属性不等于New York、或无city属性的边
        .filter(inV().has('city', 'New York'))
        .project('edge','vertex')
           .by(valueMap('number'))
           .by(inV().valueMap())

方案2:投影后过滤(适配你原有写法逻辑)

如果你确实需要先完成投影再做过滤,调整filter步骤的写法,取出valueMap中city属性的单个值做判断即可:

g.V().has('id', 1).outE()
        .project('edge','vertex')
           .by(valueMap('number'))
           .by(inV().valueMap())
        // unfold将列表格式的city属性拆为单个值再做相等判断
        .filter(select('vertex').select('city').unfold().is(eq("New York")))

内容的提问来源于stack exchange,提问作者lalala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:48:04