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]