我是Neo4J的新手,3天没有,我一直想弄明白,如何在2个房间之间找到路径。
函数allShortestPaths()
为我提供了这样的结果http://www.directupload.net/file/d/3948/79bvpbzd_jpg.htm
或像这样http://www.directupload.net/file/d/3948/56j6plhh_jpg.htm
(抱歉,我的声誉不允许我直接包含照片)。
此功能开箱即用,但使用所有类型的关系从头到尾遍历。但是,如果我只想获得与某个属性有关系的路径呢?
路径可能如下所示:(start:Room {name: "x"})-[*]-("another node")-[*]-("other node)-[:CONNECTED_TO {state: "free}]-("another node")-[*]-(end:Room {name: "y"}
我对通路的了解是:
我不知道什么,不重要的是:
下一步是指定我更精确寻找的路径,例如通过该路径中节点的属性。
即找到(A) to (H), where (C {type: "SC"})-[:CONNECTED_TO {state: "free"}]-(D {type: "SC"})
我已经阅读了很多正确知道的东西并尝试了一百万种不同的密码,但是我阅读的越多,我尝试的越多,我就越感到困惑。有人可以给我一个提示吗?
提前谢谢
Ichnafi
答案 0 :(得分:3)
我对通路的了解是:
- 开始节点
- 结束节点
- 路径中某处的关系的属性和标签
您要查找的是 ANY 谓词,它会测试谓词是否适用于集合中的至少一个元素。在您的情况下,集合是路径中的所有关系。
一个简单的查询是:
MATCH (start:Room {name:'x'}), (end:Room {name:'y'})
MATCH p=allShortestPaths((start)-[*]-(end))
WHERE ANY(
x IN rels(p) WHERE type(x) = 'RELATIONSHIP_TYPE'
AND x.prop = propValue )
RETURN distinct(p)
文档中的更多内容:http://neo4j.com/docs/stable/query-predicates.html#functions-single