Neo4j 这是返回子树的每个节点的最佳密码吗?
我有一个树状结构的图(不,更多的是DAG,因为我可以有多个父节点),并且需要能够编写查询,从一个特定节点开始,向下返回一个平面列表中的所有结果 我已经将我的一个用例简化为这个简单的例子。在这里的ascii表示中,n是我的节点,我已经附加了它们的id。p是我的身份验证系统中的权限,但与问题相关的是,它标记了我需要向下递归以收集查询应返回的节点的位置Neo4j 这是返回子树的每个节点的最佳密码吗?,neo4j,cypher,Neo4j,Cypher,我有一个树状结构的图(不,更多的是DAG,因为我可以有多个父节点),并且需要能够编写查询,从一个特定节点开始,向下返回一个平面列表中的所有结果 我已经将我的一个用例简化为这个简单的例子。在这里的ascii表示中,n是我的节点,我已经附加了它们的id。p是我的身份验证系统中的权限,但与问题相关的是,它标记了我需要向下递归以收集查询应返回的节点的位置 可以有多个与p相关的根节点 结果中应包含根,如下面的n3,以及子项 关系深度是无限的 图表: n1 ^ ^ / \ n2 n
- 可以有多个与p相关的根节点
- 结果中应包含根,如下面的n3,以及子项
- 关系深度是无限的
n1
^ ^
/ \
n2 n3<--p
^ ^
/ \
n4 n5
^
/
n6
n1
^ ^
/ \
n2 n3这可能适合您的需要:
MATCH (c)-[:HAS_PARENT*0..]->(root:n)<--(:p)
RETURN root, COLLECT(c) AS tree
MATCH(c)-[:HAS_PARENT*0..]>(root:n)我不需要返回单独的根或执行collect(),但这提供了我所需要的。我缺少的概念是:没有数字的a*默认为1而不是0,并且c和root之间的路径长度为0在逻辑上意味着c是root。谢谢
MATCH (n:n)<--(:p)
WITH collect (n) as parents, (n) as n
OPTIONAL MATCH (c)-[:HAS_PARENT*]->(n)
WITH collect(c) as children, (parents) as parents
UNWIND (parents+children) as tree
RETURN tree
MATCH (c)-[:HAS_PARENT*0..]->(root:n)<--(:p)
RETURN root, COLLECT(c) AS tree