路径中一组节点的 Neo4J 共同邻居

Neo4J common neighbors of a set nodes in a path

我的网络由节点组成,关系是一个数字。把它想象成一组城市,关系就是是否有路,如果有路有多远。

我有来自我的 neo4j 查询的路径,想知道如何在给定以下条件的情况下找到该路径的邻居。这些邻居应该是路径中不止一个节点的邻居。 在下图中,我试图说明我的意思。我的路径看起来像下面的蓝星。我想找到绿色节点。这些绿色节点连接到路径中的两个或多个节点。我画了几个这样的绿色节点。

作为输出,我想要一条包含蓝色路径和绿色路径的路径。


编辑


我原来的路径是这样的

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

如您所见,结果是一组没有关系的节点。我假设这是因为查询只有 returns 个节点。但是,我希望将那些与原始路径的“邻居”之间的连接显示在原始路径之上。

这个怎么样:

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