如何获取指定节点的所有直接与间接入边节点及路径边?
问题分析
你需要获取节点c的所有直接/间接入边节点(即所有能通过路径到达c的节点)及路径上的边,但原代码仅返回直接关联的节点和边,核心问题在于repeat与emit的配合逻辑,以及聚合操作的执行顺序。
修正后的Gremlin代码
g.V(nodeId) .repeat( __.inE().aggregate('edges') .inV() .aggregate('nodes') .simplePath() ) .emit() .cap('edges', 'nodes') .project('edges', 'nodes') .by(select('edges').unfold().dedup().id().fold()) .by(select('nodes').unfold().dedup().id().where(neq(nodeId)).fold()) .next()
关键修正点说明
- 循环遍历逻辑:调整
repeat内的操作顺序,确保每遍历一条入边就先聚合边,再聚合对应的前驱节点,同时用simplePath()避免环路径(比如c→e→a→c)导致的死循环。 - 过滤起始节点:通过
where(neq(nodeId))排除目标节点c本身,匹配你预期的返回节点集合(a、b、d、e、f、g)。 - 去重处理:最终对聚合的边和节点执行
dedup(),确保结果中没有重复元素。
如果需要包含目标节点c,只需去掉where(neq(nodeId))即可。
内容的提问来源于stack exchange,提问作者mmr25
相关产品推荐
相关产品推荐

