路径中集合节点的Neo4J公共邻居

时间:2019-12-06 12:24:58

标签: neo4j graph-databases

我的网络由节点组成,并且关系是数字。可以把它想象成一组城市,而关系就是是否有道路,如果有那么远。

我有neo4j查询的路径,想知道在以下条件下如何找到该路径的邻居。这些邻居应该与路径中的多个节点相邻。 在下面的图片中,我试图说明我的意思。我的路径看起来像下面的蓝星。我想找到绿色节点。这些绿色节点连接到路径中的两个或更多节点。我画了一些绿色节点。

作为输出,我希望有一条包含蓝色路径和绿色路径的路径。

enter image description here


编辑


我的原始路径看起来像 enter image description here

如果我使用@NonameCurious建议的解决方案,我将拥有

enter image description here

您可以看到结果是一组没有关系的节点。我认为这是因为查询仅返回节点。但是,我希望具有原始路径的那些“邻居”之间的连接显示在原始路径的顶部。

1 个答案:

答案 0 :(得分:2)

如何?

WITH nodes(path) AS nodes
UNWIND nodes AS node
MATCH (a)--(node) WHERE NOT a IN nodes
WITH a, COUNT(DISTINCT node) AS relCounts
WITH a WHERE relCounts > 1
RETURN a

我假设给出了path

更新:

如果您需要过滤关系,则可以使用以下方式:

WITH nodes(path) AS nodes
UNWIND nodes AS node
MATCH (a)-[r]-(node) WHERE NOT a IN nodes AND r.score > 27
WITH a, COUNT(DISTINCT node) AS relCounts
WITH a WHERE relCounts > 1
RETURN a

第二次更新: 如果您只想以某种方式获取所有新节点以及旧节点的子图,则可以这样做

WITH nodes(path) AS nodes, path UNWIND nodes AS node MATCH (a)-[r]-(node) 
WHERE NOT a IN nodes AND r.score > 27 
WITH a, COLLECT(DISTINCT node) AS connectedNodes, COLLECT(DISTINCT r) AS connectedRels, path WHERE SIZE(connectedNodes) > 1 
UNWIND connectedNodes AS connectedNode 
UNWIND connectedRels AS connectedRel 
RETURN a, connectedRel, connectedNode, path