1

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

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

match p = (f:folder)-[:CONTAINS*0..]->c 
where f._id = 3 
return case when c._id = f._id then null 
          else nodes(p)[length(p)-1]._id end as parentId, c;

这似乎行得通。但是我觉得必须有一种更清洁的方式。最好的方法是什么?

4

1 回答 1

1

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

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
于 2013-10-28T13:46:39.570 回答