首页 > 解决方案 > 如何使用 neo4j 高效查询深度链接节点

问题描述

抱歉,我对图形数据库和 neo4j 完全是个菜鸟。我正在尝试使用 neo4j 设计我的第一个图形数据库,但是在阅读了他们的超边示例后,我对在当前情况下该怎么做感到有些困惑。

在此处输入图像描述

假设除了用户、组和角色之外,您还拥有权限(一个角色可以拥有 n 个权限)。

我有兴趣返回给定用户的所有权限,所以我尝试转换那个超边示例并最终得到一些显然永远不会起作用的东西:

一个名为 has_permission_in_role_in_group 的关系夹。显然那是行不通的。因为我们要返回给定用户的所有权限。

如果超边在这里不好,那么您将如何有效地使用 neo4j 获得用户权限?

标签: neo4jcypher

解决方案


假设给定RolePermissions 独立于Users 和Groups,则不需要涉及Permissions 的超边,而只需要 a与其每个shasPermission之间的关系。RolePermission

在这种情况下,要获取Permission“User1”的所有不同 s,您可以使用以下查询:

MATCH (u:User {name: 'User1'})-[:hasRoleInGroup]->()-[:hasRole]->()-[:hasPermission]->(p)
RETURN u, COLLECT(DISTINCT p) AS permissions;

推荐阅读