我正在使用看起来像这样的Neo4j数据集:
我正在尝试编写一个查询,返回从绿色节点84
到节点88
的所有路径,还返回/包含具有Files
的蓝色节点与路径上的灰色节点的关系
到目前为止,我的查询如下:
MATCH (startingstatus:green {id: 84}),
(endingstatus:green {id: 88}),
path = (startingstatus) - [StatusOut*0..5] -> (endingstatus),
(scenario:gray) - [Files] -> (form:blue)
RETURN *;
问题是,现在,查询返回数据库中的每个gray - [Files] -> blue
关系(例如上面的图像),我只希望蓝色节点与灰色节点的关系带有ids { {1}},4
和20
,因为它们是路径上的节点。
我希望这是有道理的。我为必须重命名一些节点而道歉。
答案 0 :(得分:0)
很难在没有示例数据集的情况下测试查询,但您可以使用filter(),nodes()和UNWIND来尝试此解决方案:
MATCH path = (startingstatus:green {id: 84}) - [:StatusOut|:StatusIn*0..5] -> (endingstatus:green {id: 88})
WITH path, filter(node in nodes(path) where node:gray) as grayNodes
UNWIND grayNodes as grayNode
MATCH (grayNode)-[:Files]->(blueNode:blue)
RETURN path, grayNode, blueNode
解释:我正在从路径中提取灰色节点。然后我匹配与这些灰色节点相关的蓝色节点。