neo4j Cypher Query返回路径上的关系

时间:2018-02-15 16:27:42

标签: neo4j cypher

我正在使用看起来像这样的Neo4j数据集:

Sample data

我正在尝试编写一个查询,返回从绿色节点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}},420 ,因为它们是路径上的节点。

我希望这是有道理的。我为必须重命名一些节点而道歉。

1 个答案:

答案 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

解释:我正在从路径中提取灰色节点。然后我匹配与这些灰色节点相关的蓝色节点。