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
相关产品推荐
相关产品推荐

