Neo4j 在多跳密码查询中,为每个当前节点获取父节点的最佳方法是什么?

Neo4j 在多跳密码查询中,为每个当前节点获取父节点的最佳方法是什么?,neo4j,cypher,Neo4j,Cypher,我有一个文件和文件夹的图表,我基本上需要一个查询——给定一个folderId——递归地返回整个子目录结构,包括每个节点的parentId 我提出了这个解决方案(注:Cypher 2.0): 这似乎奏效了。但是我觉得一定有更干净的方法。最好的方法是什么?另一种方法是显式标识路径上的父节点 Match f:Folder-[:CONTAINS*0..]->parent-[:CONTAINS]->c where f._id = 3 Return parent._id as parent, c

我有一个文件和文件夹的图表,我基本上需要一个查询——给定一个
folderId
——递归地返回整个子目录结构,包括每个节点的
parentId

我提出了这个解决方案(注:Cypher 2.0):


这似乎奏效了。但是我觉得一定有更干净的方法。最好的方法是什么?

另一种方法是显式标识路径上的父节点

Match f:Folder-[:CONTAINS*0..]->parent-[:CONTAINS]->c
where f._id = 3
Return parent._id as parent, c._id as current
结果将不包括给定起始文件夹f的行。但由于它是一个固定值,如果您真的需要在查询结果中包含该值,您可以按如下方式将其附加到结果中

Match f:Folder-[:CONTAINS*0..]->parent-[:CONTAINS]->c
where f._id = 3
Return parent._id as parent, c._id as current
Union
Return null as parent, 3 as current

另一种方法是显式标识路径上的父节点

Match f:Folder-[:CONTAINS*0..]->parent-[:CONTAINS]->c
where f._id = 3
Return parent._id as parent, c._id as current
结果将不包括给定起始文件夹f的行。但由于它是一个固定值,如果您真的需要在查询结果中包含该值,您可以按如下方式将其附加到结果中

Match f:Folder-[:CONTAINS*0..]->parent-[:CONTAINS]->c
where f._id = 3
Return parent._id as parent, c._id as current
Union
Return null as parent, 3 as current

这很有效。。。不过我不得不把文件夹括在括号里。这很有效。。。不过,我不得不将
f:folder
括在括号中。