Neo4j如何查询与kim.horne节点直接关联的所有节点 过滤无关连接边
无关边产生的原因
- 原语句的匹配逻辑本身不存在偏差:
MATCH (c{name:'kim.horne'})-[r:REL]-(d)本身就是精准匹配kim.horne节点的所有直接无向关联边,不会跨范围匹配其他节点间的独立连接 - 冗余边的来源是返回与可视化机制:当查询返回整段路径对象
p时,Neo4j Browser会在可视化渲染时,自动为画布上已有的结果节点加载它们之间的所有现存边,哪怕这些边根本不在当前匹配的路径范围内,最终就出现了eclipse与doughlas、susan与nick这类非目标关联的连线
精准获取目标关联的修正方案
- 调整返回字段,不返回整段路径对象,直接返回查询需要的核心元素:目标节点、匹配到的直接关系、相连的对端节点,修正后的查询语句为:
MATCH (c {name: 'kim.horne'})-[r:REL]-(d) RETURN c, r, d - 若调整返回字段后仍出现冗余边,可在Neo4j Browser的可视化结果设置中,取消勾选Connect result nodes(连接结果节点)选项,关闭自动加载节点间额外边的渲染逻辑
- 若需要按方向区分关联关系,可将无向匹配替换为定向匹配:
- 匹配所有从kim.horne出发的出向关联边:
MATCH (c {name: 'kim.horne'})-[r:REL]->(d) RETURN c, r, d - 匹配所有指向kim.horne的入向关联边:
MATCH (c {name: 'kim.horne'})<-[r:REL]-(d) RETURN c, r, d
- 匹配所有从kim.horne出发的出向关联边:
内容的提问来源于stack exchange,提问作者Pygirl
相关产品推荐
相关产品推荐

