Gremlin查询中Select无法迭代问题求助
问题分析与解决方案
问题出在你的mergeV查询未正确将当前遍历的group_id作为匹配条件,导致每次操作都指向同一个顶点,最终返回重复ID。
错误原因
原查询中mergeV([(label): 'Peoplegroup']).property('group_id', select('gid'))仅指定了顶点标签,未将group_id纳入匹配逻辑。Gremlin无法区分不同的group_id,只会重复操作同一个顶点(或创建重复顶点但返回同一ID,取决于图数据库的实现)。
修正后的查询
方式一:将group_id纳入mergeV的匹配Map
g.inject( [ [stock_height:111, sh_id:"sh123", inputs: [house: "inputhouse123ia"], outputs: [[house: "outputhouse123oa", group_id: "gid-123a"],[house: "outputhouse123ob", group_id: "gid-123b"]]], [stock_height:111, sh_id:"sh1234", inputs: [house: "inputhouse1234ia"], outputs: [[house: "outputhouse1234oa", group_id: "gid-1234a"],[house: "outputhouse1234ob", group_id: "gid-1234b"]]] ]). unfold().as('sh'). select('outputs'). unfold().as('output'). select('group_id').as('gid'). mergeV([label: 'Peoplegroup', group_id: select('gid')]).id()
方式二:使用mergeV+on语法(Gremlin 3.5+)
g.inject( [ [stock_height:111, sh_id:"sh123", inputs: [house: "inputhouse123ia"], outputs: [[house: "outputhouse123oa", group_id: "gid-123a"],[house: "outputhouse123ob", group_id: "gid-123b"]]], [stock_height:111, sh_id:"sh1234", inputs: [house: "inputhouse1234ia"], outputs: [[house: "outputhouse1234oa", group_id: "gid-1234a"],[house: "outputhouse1234ob", group_id: "gid-1234b"]]] ]). unfold().as('sh'). select('outputs'). unfold().as('output'). select('group_id').as('gid'). mergeV(label, 'Peoplegroup').on('group_id', select('gid')).id()
效果说明
修正后,mergeV会根据每个遍历到的group_id值查找对应顶点:
- 若顶点已存在,返回其ID
- 若顶点不存在,创建新顶点并返回新ID
最终会得到4个独立的顶点ID(若所有group_id都是首次出现)。
内容的提问来源于stack exchange,提问作者Kevin Boughton
相关产品推荐
相关产品推荐

