neo4j - 如何使用 neo4j 高效查询深度链接节点
问题描述
抱歉,我对图形数据库和 neo4j 完全是个菜鸟。我正在尝试使用 neo4j 设计我的第一个图形数据库,但是在阅读了他们的超边示例后,我对在当前情况下该怎么做感到有些困惑。
假设除了用户、组和角色之外,您还拥有权限(一个角色可以拥有 n 个权限)。
我有兴趣返回给定用户的所有权限,所以我尝试转换那个超边示例并最终得到一些显然永远不会起作用的东西:
一个名为 has_permission_in_role_in_group 的关系夹。显然那是行不通的。因为我们要返回给定用户的所有权限。
如果超边在这里不好,那么您将如何有效地使用 neo4j 获得用户权限?
解决方案
假设给定Role
的Permission
s 独立于User
s 和Group
s,则不需要涉及Permission
s 的超边,而只需要 a与其每个shasPermission
之间的关系。Role
Permission
在这种情况下,要获取Permission
“User1”的所有不同 s,您可以使用以下查询:
MATCH (u:User {name: 'User1'})-[:hasRoleInGroup]->()-[:hasRole]->()-[:hasPermission]->(p)
RETURN u, COLLECT(DISTINCT p) AS permissions;
推荐阅读
- oracle - 实现 GROUP BY oracle 查询导致:不是 Ruby 中的 GROUP BY 表达式
- mysql - 获取字符串 MS Access SQL Query 中第一个字母后的子字符串
- python - 如何从 Python 中的 CSV 文件生成多个 Vcard QRCode?
- java - 查找多个时间表的共同空闲时间。仅使用列表
- windows-server-2019 - 如何在 server2019 上为 Windows 管理中心分配网关角色?
- oauth-2.0 - Google oAuth 中的客户端凭据授予
- php - 增量 (+1) Php/MongoDB - MongoDB\Driver\Manager 的 FindOneAndUpdate
- c# - 使用 Webmatrix、Bootstrap、Html 和 SQL 为 ForeignKey 保留相同 ID 的两个表插入
- python - 我无法用字典解决的python IndexError
- .net - AWS CodeBuild 中是否支持 GitVersion?