如何构建Cypher查询,根据节点F的non-direct属性生成O到F的指定路径
根据节点属性返回对应路径的Cypher实现
问题场景
现有图结构如下:
O | A | B / \ C E / \ D F
需要查询从节点O到节点F的路径,节点F包含non-direct属性:
- 当属性值为
false时,返回直连路径O-A-B-E-F - 当属性值为
true时,返回绕路路径O-A-B-C-D-C-B-E-F(先到B,绕行至D后返回B,再前往F)
Cypher查询代码
以下是可直接使用的查询语句,请根据实际节点标签、关系类型和标识属性调整:
// 定位目标节点F MATCH (f:F {name: 'F'}) // 根据non-direct属性匹配对应路径模式 MATCH path = CASE f.non-direct WHEN false THEN (o:O {name: 'O'})-[:*]->(b:B)-[:*]->(f) WHEN true THEN (o:O {name: 'O'})-[:*]->(b:B)-[:*]->(c:C)-[:*]->(d:D)<-[:*]-(c)-[:*]->(b)-[:*]->(f) END // 返回最终路径 RETURN path AS targetPath
关键说明
- 代码中的
:O、:B等是节点标签,name是节点的标识属性,请替换成你实际使用的标签和属性(比如用id代替name) [:*]表示匹配任意长度的关系链,如果你的图中关系有明确类型(比如[:CONNECTS]),可以替换为[:CONNECTS*]来提升查询精度- 如果需要严格遵循指定节点顺序(不能跳过中间节点),可以把
[:*]换成明确的单步关系,比如(o)-[:CONNECTS]->(a)-[:CONNECTS]->(b)
内容的提问来源于stack exchange,提问作者drdot
相关产品推荐
相关产品推荐

