Cypher 匹配连接到最后一个关系过滤的节点的任何节点
Cypher match any node connected to a node filtered by last relation
我有一个像这样的 neo4j 图:
(AdminUser) - [is_admin] -> (Tenat) - [can_edit,can_read] -> (Resource)
(RegularUser) - [can_edit] -> (Resource)
(RegularUser2) - [can_read] -> (Resource)
这是一个简化版本,所以我想获取给定用户在任何路径上连接的所有资源,但是资源节点之前的最后一个关系是 'can_edit'
我会尝试
match(u:User{id:'regular'}) // I'd like to insert user id here
-[*]->(r:Resource) // here not sure how to limit last relation as can_edit
在上面的示例中,如果我插入 AdminUser 或 RegularUser id 而不是 RegularUser2,我想获取 Resource
你可以做一些简单的事情,比如:
match(u:User{id:'regular'})-[*0..]->()-[:can_edit]->(r:Resource)
这将确保资源之前的最后一个关系是 [:can_edit]
我有一个像这样的 neo4j 图:
(AdminUser) - [is_admin] -> (Tenat) - [can_edit,can_read] -> (Resource)
(RegularUser) - [can_edit] -> (Resource)
(RegularUser2) - [can_read] -> (Resource)
这是一个简化版本,所以我想获取给定用户在任何路径上连接的所有资源,但是资源节点之前的最后一个关系是 'can_edit'
我会尝试
match(u:User{id:'regular'}) // I'd like to insert user id here
-[*]->(r:Resource) // here not sure how to limit last relation as can_edit
在上面的示例中,如果我插入 AdminUser 或 RegularUser id 而不是 RegularUser2,我想获取 Resource
你可以做一些简单的事情,比如:
match(u:User{id:'regular'})-[*0..]->()-[:can_edit]->(r:Resource)
这将确保资源之前的最后一个关系是 [:can_edit]