【发布时间】:2022-01-06 13:32:59
【问题描述】:
我有一个像文件夹结构一样的树结构,所以对于一个没有深度限制的嵌套项目的项目,每个节点都有访问权限。
这是我的图表:
这是我的查询:
MATCH (a:Account {name: "bob"})-[r:VIEWER | EDITOR]->(c:Project)
MATCH (c)<-[:IS_PARENT*]-(p)
WHERE (p)<-[:VIEWER | EDITOR]-(a)
WITH TYPE(r) as relation, p, collect(distinct c) AS children
RETURN {name: p.name, Children: [c in children | {name: c.name, access:relation}]}
这是我的结果:
这就是我想要得到的:
我的问题是结果被分成两个结果,nested child 没有嵌套在cohort 中。
另一件棘手的事情是,如果我与它没有关系,我不想获得一个节点。
例如这里我删除了bob和cohort之间的关系:
所以我不能在我的结果中得到cohort,像这样:
如果你想试试,这是我的数据:
MERGE (project:Project:RootProject {name: "project test"})
MERGE (child1:Project {name: "cohort"})
MERGE (child2:Project {name: "protocol"})
MERGE (child3:Project {name: "experience"})
MERGE (child4:Project {name: "nested child"})
MERGE (project)-[:IS_PARENT]->(child1)
MERGE (project)-[:IS_PARENT]->(child2)
MERGE (project)-[:IS_PARENT]->(child3)
MERGE (child1)-[:IS_PARENT]->(child4)
MERGE (bob:Account {name: "bob"})
MERGE (bob)-[:EDITOR]->(child4)
MERGE (bob)-[:EDITOR]->(child2)
MERGE (bob)-[:VIEWER]->(child3)
MERGE (bob)-[:VIEWER]->(child1)
MERGE (bob)-[:VIEWER]->(project)
我尝试了很多东西,但我从来没有得到好的结果。
【问题讨论】:
-
好帖子。它具有预期的结果、示例查询和示例数据。