路径中一组节点的 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
我的网络由节点组成,关系是一个数字。把它想象成一组城市,关系就是是否有路,如果有路有多远。
我有来自我的 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