Neo4j:Return 仅来自可能的 child 路径的根节点

Neo4j: Return only root nodes from possible child paths

我有一组 (n) 个值,它们在我的图表中都有相应的节点。我从彼此之间未知的关系开始。 (请参阅蓝色的起始节点)

我想尽可能简单地找出 value/nodes 是否是其他任何 children 然后应用这些规则来过滤结果:

  1. 如果节点是 child 则丢弃它。 (白色节点)
  2. 如果节点是根,则 return 它。 (绿色节点)
  3. 如果节点没有任何children也return它。 (绿色节点 673)

最多可以有50个起始节点。我已经尝试遍历它们,一次比较两个,如果它们是 child,则丢弃它们 - 但迭代次数在较大的集合中很快就会失控。我希望有一些我忽略的图形魔法。请使用 Cypher!

谢谢!

假设您有一个输入参数 nids - 节点的 id 属性 的一组值,目标节点具有标签 Node,关系节点之间的类型为 hasChild.

然后你需要从输入集对应的节点中找到这样的输入集对应的节点,并且没有父节点:

UNWIND {nids} as nid
MATCH (N:Node {id: nid})
OPTIONAL MATCH (N:Node {id: nid})<-[:hasChild]-(P:Node) WHERE P.id IN {nids}
WITH N, collect(P) AS ts WHERE size(ts) = 0
RETURN N

并且不要忘记为节点 id 属性 添加索引:

CREATE INDEX ON :Node(id)