寻找一种从一组节点中查找关系的干净方法
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
的参数传递。
如果要排除节点与自身的关系:
MATCH (a)-[r]-(b)
WHERE id(a) IN {ids} AND id(b) IN {ids} AND a <> b
RETURN r;
如果要包含从节点到自身的关系:
MATCH (a)-[r]-(b)
WHERE id(a) IN {ids} AND id(b) IN {ids}
RETURN r;
我有一组节点,我想编写一个查询来查找这些节点之间存在的所有关系。
有什么推荐吗?
我的第一次尝试是 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
的参数传递。
如果要排除节点与自身的关系:
MATCH (a)-[r]-(b) WHERE id(a) IN {ids} AND id(b) IN {ids} AND a <> b RETURN r;
如果要包含从节点到自身的关系:
MATCH (a)-[r]-(b) WHERE id(a) IN {ids} AND id(b) IN {ids} RETURN r;