我有一个名为PracticeArea的节点,可以有一个父练习区和儿童练习区。
当我拉出一个特定的练习区域时,我希望它能为我带来父节点及其子节点的特定节点。但是,neo也给了我所有孩子的父母,父母和孩子的孩子,简而言之,加载了整个图表。
无论是使用Spring Data neo4j存储库,自定义查询还是neo4jTemplate,我都得到相同的结果。
interface PracticeAreaGenericRepository extends GraphRepository<PracticeArea> {
@Query("MATCH (n:PracticeArea {practice_area_id:{0}})-[HAS_CHILDREN_PRACTICE_AREA*1]->(c) MATCH (n)-[HAS_PARENT_PRACTICE_AREA*1]->(p) RETURN n, p")
PracticeAreaData findByPracticeArea(String uuid);
}
PracticeAreaData.java
@QueryResult
public class PracticeAreaData {
@ResultColumn("n")
PracticeArea node;
@ResultColumn("p")
PracticeArea parent;
/* Getters & Setters */
}
请说明哪里出错..谢谢
答案 0 :(得分:1)
您的查询缺少一个关键部分,WITH
将两者连接在一起,并将n
从第一部分传递到第二部分。如果没有它,您只需找到具有父练习区和所有父练习区的所有节点。
MATCH (n:PracticeArea {practice_area_id:{0}})-[HAS_CHILDREN_PRACTICE_AREA*..1]->(c)
WITH n
LIMIT 1
MATCH n-[HAS_PARENT_PRACTICE_AREA*..1]->(p)
RETURN n, p