具有关系属性的Neo4j shortestPath cypher

时间:2016-04-29 09:52:20

标签: neo4j cypher

我有一个数据库,节点(Tiles)与关系连接(连接)。 tile和关系都有一个名为blocked的属性。我想获得2个节点之间的最短路径,而不包含阻塞的节点或关系。因此,当阻塞属性为true时,在找到最短路径时不使用该节点/关系。 我正在努力解决的问题是当我尝试在该属性上过滤它们时的关系。

例如,当我尝试:

MATCH (node1:Tile {x :1, y :1, blocked:false}),(node2:Tile {x: 2, y: 4, blocked:false}),
p = shortestPath((node1)-[:Connects {blocked:false}]-(node2)) 
RETURN p

我收到错误:

shortestPath(...) contains properties MapExpression(List((PropertyKeyName(blocked),False()))). This is currently not supported. (line 2, column 5 (offset: 93))
"p = shortestPath((node1)-[:Connects {blocked:false}]-(node2))"

所以我的问题是:我是否弄错了密码,或者我是否真的尝试了一些不受支持的东西。当然,这个难题的最佳解决方案是什么?

1 个答案:

答案 0 :(得分:3)

这应该选择清除了“阻塞”标志的所有路径。您可能希望将[:Connects *]关系调整到合理的限制。

MATCH (node1:Tile {x :1, y :1, blocked:false}),
      (node2:Tile {x: 2, y: 4, blocked:false}),
      p = shortestPath((node1)-[:Connects*]-(node2)) 
WHERE ALL (x IN RELATIONSHIPS(p) WHERE x.blocked = FALSE)
RETURN p