如何找到两个通过关系路径可达的节点 并要求路径的中间多个节点有一项属性是相同的
发布于 6 年前 作者 haidfs 2111 次浏览 来自 问答

例如如下语句创建的图: create (小北:朋友圈{姓名:“小北”, 喜欢的书类:“Poetry”}), (小菲:朋友圈{姓名:“小菲”, 喜欢的书类:“Science Fiction”}), (小鹏:朋友圈{姓名:“小鹏”, 喜欢的书类:“Poetry”}), (小颖:朋友圈{姓名:“小颖”, 喜欢的书类:“Politics”}), (小兰:朋友圈{姓名:“小兰”, 喜欢的书类:“Music”}), (小峰:朋友圈{姓名:“小峰”, 喜欢的书类:“Poetry”}), (小讯:朋友圈{姓名:“小讯”, 喜欢的书类:“Poetry”}), (小东:朋友圈{姓名:“小东”, 喜欢的书类:“Sequential Art”}), (小唯:朋友圈{姓名:“小唯”, 喜欢的书类:“Poetry”}), (小窦:朋友圈{姓名:“小窦”, 喜欢的书类:“Poetry”}), (小齐:朋友圈{姓名:“小齐”, 喜欢的书类:“Default”}), (小林:朋友圈{姓名:“小林”, 喜欢的书类:“Poetry”}), (小锐:朋友圈{姓名:“小锐”, 喜欢的书类:“Poetry”}), (小伟:朋友圈{姓名:“小伟”, 喜欢的书类:“Young Adult”}), (小玲:朋友圈{姓名:“小玲”, 喜欢的书类:“Business”}), (小讯)-[:认识]->(小窦), (小讯)-[:认识]->(小齐), (小讯)-[:认识]->(小林), (小讯)-[:认识]->(小鹏), (小讯)-[:认识]->(小伟), (小讯)-[:认识]->(小峰), (小菲)-[:认识]->(小鹏), (小菲)-[:认识]->(小峰), (小菲)-[:认识]->(小唯), (小峰)-[:认识]->(小北), (小峰)-[:认识]->(小兰), (小东)-[:认识]->(小林), (小东)-[:认识]->(小锐), (小东)-[:认识]->(小菲), (小鹏)-[:认识]->(小颖), (小北)-[:认识]->(小兰), (小颖)-[:认识]->(小东), (小唯)-[:认识]->(小鹏), (小唯)-[:认识]->(小锐), (小伟)-[:认识]->(小玲)

我想找到走n(n>=3)条路径能够联通的节点,并且要求中间节点的人喜欢的书类是一样的 举例: 小讯->小鹏->小唯->小锐,起始和终止节点的属性不管,中间的两个节点,小鹏和小唯喜欢的书都是Poetry,这个就是满足需求的,请教各位该怎么做?

2 回复

试试这个,看是否是你要的: MATCH path=(a:朋友圈)-[:认识*2…]->(b:朋友圈) WITH path, nodes(path)[1…-1] as nodes, nodes(path)[1].喜欢的书类 as favorite WHERE ALL (x IN nodes WHERE x.喜欢的书类=favorite) RETURN path LIMIT 1

@zhizh 感谢前辈,开始提问的时候对Cypher api了解不多,后面想出来的基本也是这样,忘记贴自己的想法了

回到顶部