为什么neo4j递归获取?
我有一个名为PracticeArea的节点,可以有父PracticeArea和子PracticeArea 当我拉一个特定的练习区域时,我希望它能给我带来这个特定的节点及其父节点和子节点。但是,neo也给了我它父母的孩子,父母和所有孩子的孩子,简言之,加载整个图表 无论使用SpringDataNeo4j存储库、自定义查询还是neo4jTemplate,我都会得到相同的结果为什么neo4j递归获取?,neo4j,spring-data-neo4j,Neo4j,Spring Data Neo4j,我有一个名为PracticeArea的节点,可以有父PracticeArea和子PracticeArea 当我拉一个特定的练习区域时,我希望它能给我带来这个特定的节点及其父节点和子节点。但是,neo也给了我它父母的孩子,父母和所有孩子的孩子,简言之,加载整个图表 无论使用SpringDataNeo4j存储库、自定义查询还是neo4jTemplate,我都会得到相同的结果 interface PracticeAreaGenericRepository extends GraphRepository
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);
}
请指出哪里出了问题。谢谢,您的查询缺少一个关键部分,
与
连接在一起,并将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
是的,这是有道理的,但我得到了以下错误:java.util.NoSuchElementException:org.neo4j.helpers.collection.iterablerRapper中有多个元素$MyIteratorWrapper@d706480. 第一个元素是'com.xxx.practicearea.dto'。PracticeAreaData@50a1a18f第二个元素是com.xxx.practicearea.dto。PracticeAreaData@58ca300'因为它返回一个练习区集合,所以您必须添加“限制1”以始终将其限制为1个元素。此外,此
-[HAS_CHILDREN_practice_AREA*1]->
表示长度为1或更多的路径!!为了简单起见,我从查询中去掉了子项@查询(“匹配(n:PracticeArea{practice\u area\u id:{0}})-[HAS_PARENT\u practice\u area*1]->(p)返回n,p限制1”),但我仍然在父节点下获取父节点的子节点。所以它又上升又下降了。对不起,回答不好,然后消失了几天。我根据Michael的评论对查询进行了一些更改。
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