存在关系时如何遍历节点

How to iterate through node while there is a relationship

我的节点结构类似于文件夹、子文件夹和文件。任何文件夹都可以与子文件夹有关系,子文件夹可以与另一个子文件夹有关系,子文件夹可以与文件有关系。我想遍历每个文件夹以找到给定文件夹内的每个子文件夹和文件。

在一个查询中,我希望能够获取某个文件夹或其子文件夹中的每个文件。我找不到用 Cypher 做的任何方法。我看到了 FOREACH 和 UNWIND,但我认为它对我没有帮助。

假设您已将节点相应地标记为文件夹和文件,以下查询将直接或通过一个或多个 sub-folders 链获取属于起始文件夹的所有文件:

MATCH(ParentFolder:Folder)-[*]->(childFile:File)
WHERE ParentFolder.name='Folder1'
RETURN childFile

如果您没有使用过标签(强烈建议使用它们),您可以查找以指定文件夹开头的所有路径,并找到该路径中所有最后的节点。

MATCH(ParentFolder)-[*]->(childFile)
WHERE ParentFolder.name='Folder1' AND NOT (childFile)-->()
RETURN childFile

第二个查询将获取所有终端节点,即使它们是文件夹。您必须在 where 子句中使用标签或添加过滤器,以确保只为 childFile 获取文件。

两个版本的查询都基于 varying length paths。通配符 (*) 检索从 ParentFolder 开始的任意长度的所有路径。