如何在GREMLIN中使用上一步的值过滤下一步操作
解决Gremlin递归查询无法获取关联顶点f7的问题
当前从f4出发的递归查询仅能获取f1和f6,无法拿到f7顶点,核心问题是在repeat内部引用上一步顶点时出现上下文丢失,导致匹配条件失效。
问题原因
在处理cd顶点的分支中,原查询用as('vv')标记顶点后,遍历到uses边时,路径上下文已切换到该边,无法通过select('vv')回溯到之前的cd顶点,导致where条件无法匹配到product2的uses边(对应f7)。
解决方案
修改cd分支的遍历逻辑,保留cd顶点的上下文引用,确保匹配条件能正确关联cd名称与uses边的value属性;同时补充health_score顶点的处理逻辑,完善路径覆盖。
修改后的查询语句
g.V().has('name', 'f4') .repeat( inE() .choose(label()) .option('uses', outV()) .option('has', choose(outV().label()) .option('cd', outV().as('cd') .in('has') .inE('uses') .where(has('value', select('cd').values('name'))) .outV() ) .option('health_score', outV()) ) ) .until(inE().count().is(0)) .emit(hasLabel('formula'))
更清晰的match版本
g.V().has('name', 'f4') .repeat( inE() .choose(label()) .option('uses', outV()) .option('has', choose(outV().label()) .option('cd', match( __.as('currentCd').in('has').as('product'), __.as('product').inE('uses').has('value', __.select('currentCd').values('name')).outV().as('targetFormula') ) .select('targetFormula') ) .option('health_score', outV()) ) ) .until(inE().count().is(0)) .emit(hasLabel('formula'))
修改后的查询会正确遍历到f7,同时还能获取到之前遗漏的f5顶点,完整覆盖所有关联的formula类型顶点。
内容的提问来源于stack exchange,提问作者ephraim lambarte
相关产品推荐
相关产品推荐

