寻找一种从一组节点中查找关系的干净方法

looking for a clean way to find relationships from a set of nodes

我有一组节点,我想编写一个查询来查找这些节点之间存在的所有关系。

有什么推荐吗?

我的第一次尝试是 MATCH a-[rel]-b WHERE... 并且我的 WHERE 子句将是我在我的节点集中拥有的所有 ID 的 OR。

有更好的主意吗?

你可以这样做:

MATCH (a)-[rel]-()
WHERE ID(a) IN {node_ids}
RETURN rel, ID(rel), type(rel), ID(startNode(rel)), ID(endNode(rel))

在这里你将传递一个 node_ids parameter ,这将是一个数组。

另请注意,如果 Neo4j 对节点进行碎片整理,使用内部 Neo4j ID 对节点进行长期引用可能会中断。

在这些答案中,我假设您将 ID 列表作为名为 ids 的参数传递。

  1. 如果要排除节点与自身的关系:

    MATCH (a)-[r]-(b)
    WHERE id(a) IN {ids} AND id(b) IN {ids} AND a <> b
    RETURN r;
    
  2. 如果要包含从节点到自身的关系:

    MATCH (a)-[r]-(b)
    WHERE id(a) IN {ids} AND id(b) IN {ids}
    RETURN r;