我的网络由节点组成,并且关系是数字。可以把它想象成一组城市,而关系就是是否有道路,如果有那么远。
我有neo4j查询的路径,想知道在以下条件下如何找到该路径的邻居。这些邻居应该与路径中的多个节点相邻。 在下面的图片中,我试图说明我的意思。我的路径看起来像下面的蓝星。我想找到绿色节点。这些绿色节点连接到路径中的两个或更多节点。我画了一些绿色节点。
作为输出,我希望有一条包含蓝色路径和绿色路径的路径。
编辑
如果我使用@NonameCurious建议的解决方案,我将拥有
您可以看到结果是一组没有关系的节点。我认为这是因为查询仅返回节点。但是,我希望具有原始路径的那些“邻居”之间的连接显示在原始路径的顶部。
答案 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