如何编写Neo4j Cypher查询筛选仅关联指定节点集合的节点
符合要求的Cypher查询写法
核心逻辑是校验待查节点不存在任何关联到预设列表外的节点,推荐使用更简洁的NONE函数实现:
// 替换下方列表为你预设的允许关联的节点标识,示例用name属性匹配,可替换为id等其他属性 WITH ['d', 'e'] AS allowed_node_names MATCH (target_node) // 校验target_node没有任何出边指向允许列表外的节点 WHERE NONE( (target_node)-[]->(related_node) WHERE related_node.name NOT IN allowed_node_names ) // 可选:如果要求节点至少要有1条关联,取消注释下一行 // AND EXISTS( (target_node)-[]->() ) RETURN target_node
逻辑说明
- 你的示例中,节点a因为存在指向f的出边,f不在
['d','e']列表中,会被NONE条件过滤 - 节点b、c的所有出边指向的节点都在允许列表内,会正常返回
- 如果需要匹配入边或无方向的关联,只需修改关系箭头的写法:
- 匹配入边:
(related_node)-[]->(target_node) - 匹配任意方向关联:
(target_node)-[]-(related_node)
- 匹配入边:
内容的提问来源于stack exchange,提问作者richard jones
相关产品推荐
相关产品推荐

