Neo4j 使用属性过滤器通过多个关系定向路径

2024-02-26

作为 Cypher 和 Neo4j 的新手,我在为我的用例构建查询时遇到问题。我正在构建一个简单的 ACL(访问控制列表),并正在寻找一条通过权限关系向上层次结构的路径。一张图或许能更好地解释它:

Key:
    Users -> Blue
    Groups -> Yellow, Green
    Resource Tree -> Red

现在我想看看是否存在从 Bob 到eVar 33Bob 拥有的资源update使用权。因为有一条直接路径,我可以通过运行得到我想要的东西

MATCH p =(usr:Usr)-[:AXO {update: true}]->(aco:ACO)
WHERE usr.name = 'Bob' AND aco.name = 'eVar 33'
RETURN p

但现在,鲍勃也是媒体管理授予他的组read访问转换资源。并且因为转换比资源树更靠上eVar 33, eVar 33应该继承这个权限。但是当我运行相同的查询来寻找{read: true}相反,没有找到路径。我知道这是因为我不允许遍历:IN and :HAS关系,但我该怎么做呢?

我努力了:

MATCH p =(usr:Usr)-[:IN|:HAS|:AXO {read: true}]->(aco:ACO)
WHERE usr.name = 'Bob' AND aco.name = 'eVar 33'
RETURN p

认为这将允许遍历这些关系,但它仍然找不到路径(因为我不允许深度超过 1?)。

所以这是我的需求:

  • 路径深度未知
  • 我返回的任何路径都很好(我真正关心的是“是否有路径?”)
  • 必须能够从用户获取资源,并且当遵循 AXO 关系时,它必须与属性过滤器匹配。
  • 必须遵循有向图(例如 Bob 没有权限分析)

不,我不为耐克工作。这里只是一个示例用例:)


这是你想要的吗?

MATCH (bob:User { name:"Bob" })-[:IN*0..]->(group)-[:AXO { read:true }]->(res1)-[:HAS*0..]->(res2 { name:"eVar 33" })
RETURN count(*)

我认为这个查询的意思是这样的:“给我用户 Bob,以及任何[:AXO{read:true}]他与资源 eVar 33 的关系。您可以通过零个或多个[:IN]通过 Bob 的组以及零个或多个来访问资源[:HAS],因为资源继承权限”。

>1表示读取访问权限,0意思是不是。

If your [:IN] or [:HAS]树木非常复杂,您可能需要限制深度。

Edit
关于通过返回找到的第一个路径进行优化的评论,如何以这种方式控制查询执行并不总是显而易见的,有时您必须知道 Cypher 何时以及如何惰性。将结果限制为 1 可能就足够了,但在这种情况下,稍微重新编写查询可能更切题,例如:“给我用户 Bob,如果他有任何[:AXO{read:true}]与资源 eVar 33 的关系。您可能会经历...”

现在,从 Bob 到资源的路径是一个谓词,您的 Bob 在此基础上MATCH子句被过滤。在 Cypher 中,类似的东西

MATCH (bob:User { name:"Bob" })
WHERE bob-[:IN*0..]->()-[:AXO { read:true }]->()-[:HAS*0..]->({ name:"eVar 33" })
RETURN true

如果路径谓词评估为 false,则不会返回任何内容。如果您想根据返回的内容而不是是否返回内容来确定权限,请不要使用WHERE但只返回谓词的计数,或者更好的是谓词计数为 1 的断言。由于模式不是MATCH子句不会扩展您的结果,因此计数将为 0 或 1(如果只有一个鲍勃)。

MATCH (bob:User { name:"Bob" })
RETURN 1 = count (bob-[:IN*0..]->()-[:AXO { read:true }]->()-[:HAS*0..]->({ name:"eVar 33" }))

它可能“感觉”就像计算路径谓词意味着计算路径,但事实并非如此。尝试删除{read:true}要获得图中具有多个匹配项的路径模式 - 将其算作谓词仍然给出 1。

MATCH (bob:User { name:"Bob" })
RETURN 1 = count (bob-[:IN*0..]->()-[:AXO]->()-[:HAS*0..]->({ name:"eVar 33" }))

尝试分析这样的查询并与第一个查询进行比较LIMIT 1看看哪个执行计划最有意义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Neo4j 使用属性过滤器通过多个关系定向路径 的相关文章

  • 管理角色并向角色分配权限 - Symfony

    我正在 Symfony 3 中基于角色和权限构建一个管理面板 每个管理员将被分配一个角色 或多个角色 然后他将能够根据分配给该角色的权限执行操作 为了给您一个想法 这里有一个例子 管理面板具有添加用户 编辑用户和删除用户的功能 我创建了一个
  • sudoers 是世界可写错误[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我更改了 Ubuntu 12 10 上的 ect 文件权限 以便我可以编辑 bash bashrc 以便 Neo4j 可以看到 JVM 但现在当我尝试
  • 使用 py2neo 在 neo4j 上查询写入性能

    目前 我正在努力寻找一种高性能的方法 使用 py2neo 运行多个查询 我的问题是 python 中有一大堆需要写入 neo4j 的写入查询 我现在尝试了多种方法来解决这个问题 对我来说最好的工作方法如下 from py2neo impor
  • Bulbflow:neo4jserver Graph 和 neo4jserver Neo4jclient 之间的区别

    我现在正在尝试学习如何连接到 Neo4j 服务器并使用 Python 中的 Bulbflow 在其上运行 Cypher 查询 我不明白的是连接到 neo4j 服务器的两种可能性之间的区别 1 Graph http bulbflow com
  • 一起使用 MongoDB 和 Neo4j

    我正在开始一个新项目 我正在考虑使用 MongoDB 作为文档存储工具 使用 Neo4j 作为映射文档之间关系的机制 然后我想通过 REST API 公开查询结果 人们会说这样做的优点和缺点是什么 是否有更好的方法可以使用不同的 NoSQL
  • plesk 上的 docker 中的 Neo4j(3.4.17、3.5.13、4.0.0)不使用 /ssl 中提供的 SSL 证书,而是尝试删除它们并进行自己的自签名

    此配置在某些时候对我有用 但由于没有启用自动续订 在短暂的 VPS 暂停后就停止了 根据文档 我在一个文件夹中提供了 neo4j cert 和 neo4j key 然后将其安装在 ssl 的容器上 不幸的是 neo4j 将停留在 清理自生成
  • 将 mongodb 与 neo4j 集成,是否有任何 API 可以链接它们?

    我正在研究推荐引擎 用户数据被收集 他们的友谊 位置 喜欢 教育 并已存储在 mongodb 中 我需要向这些用户推荐相关产品 我计划使用 Neo4j 作为推荐引擎 原因很明显 易于节点之间的遍历 路径信息 问题是我必须首先将 mongod
  • Neo4j 的数据库级验证

    我使用 Neo4j 作为我的图形数据库 假设我想限制用户名字段的长度小于10 有没有办法在数据库级别施加这样的约束 现在 您必须在应用程序级别上执行此操作 或者通过注册一个事务提交挂钩来检查该属性字段是否符合特定标准 See http do
  • 使用 scala 检索与给定节点相关的 neo4j 节点

    我有 2 个名为 User node 和 Article node 的节点 它们通过关系相关联 文章节点 gt Written By gt 用户节点 如何获取给定用户节点写入的所有文章节点 我假设您正在使用嵌入式 neo4j 因此有一个类型
  • 使用cypher删除neo4j中的所有节点和关系超出堆空间

    我一直在尝试按照 neo4j google 组和其他在线来源的建议运行此查询 开始 n 节点 匹配 n r 其中 ID n gt 0 删除n r 为了删除测试之间的所有节点和关系 当我从控制台执行此操作时 我用完了 java 堆空间 当我从
  • Neo4j 2.0 唯一约束错误“节点已存在”,当它不存在时

    我在 Neo4j 唯一约束方面遇到了一些麻烦 其中 CREATE cypher 语句由于节点已经存在而无法执行 问题是 它不 存在 此外 昨天使用这些确切数据的精确流程也有效 我的neo4j版本是ubuntu 12 04 3上的commun
  • Neo4j 的 Cypher 查询语言是开源的吗?

    Neo4j的语言Cypher的现状如何 我真的很喜欢它 但我想避免 Neo4j 锁定 是否还有像 Gremlin 中那样的其他 Cypher 界面 Regards Cypher 完全是 OSS 请参阅https github com neo
  • Neo4j:插入 7k 节点很慢(Spring Data Neo4j / SpringRestGraphDatabase)

    我正在构建一个应用程序 我的用户可以在其中管理字典 其中一项功能是上传文件以初始化或更新词典的内容 我首先关注的结构部分是Dictionary CONTAINS gt Word 从一个空数据库 Neo4j 1 9 4 但也尝试过 2 0 0
  • 如何将dbpedia导入neo4j? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要将 dbpedia 导入 neo4j 我从这里下载 dbpedia http wiki dbpedia org Download
  • 使用 neo4j 建模有序树

    我刚刚开始使用 neo4j 并且了解图形和关系的原理 但是我在想要建模的某些结构方面遇到了一些麻烦 我想在编程语言项目中使用它 并存储已解析源文件的 AST 从那里 我计划向节点添加大量额外的数据和关系 以帮助分析和工具 但基本的 AST
  • Neo4j 在 Cypher 查询运行中仅使用一个核心

    当我在 UI 中运行 Cypher 查询时 服务器中只有一个核心正在运行 查询会卡住或响应非常慢 我使用 Neo4j 3 0 7 社区 有人知道我可以使用所有核心进行哪些调整吗 单个 Cypher 查询仅限于单个线程 看到这个tweet h
  • 如何返回每个另一个节点属性的最大计数

    我需要计算一位作曲家的音乐作品每十年被演奏了多少次 然后只返回每十年演奏次数最多的一首作品 除了过滤除每十年最高计数之外的所有内容之外 该密码可以执行所有操作 match c Composer CREATED BY w Work lt 2
  • 如何使用 spring-data-neo4j 配置 neo4j EmbeddedGraphDatabase (现已弃用)?

    我正在使用 spring data neo4j 3 1 1 Release 和 neo4j 2 1 2 我设法制作了一个运行良好的 spring 配置 但它使用了 org neo4j kernel EmbeddedGraphDatabase
  • 同时运行 Gremlin-Server 和 NEO4J Server

    目前看来我们不能同时运行两者Neo4J服务器 and Gremlin服务器同时 有什么办法可以同时运行两者吗 NEO4J 正在运行 我尝试启动 Gremlin Server 然后出现以下错误 java lang RuntimeExcepti
  • 从 Java 中提取 Lotus Notes Document 的完整 ACL

    我正在尝试找到一种方法来保存特定 Lotus Notes 文档的完整用户列表访问权限 我知道我可以从catalog nsf 获取数据库级ACL 但不能获取文档级访问权限 此外 我相信文档的 作者 字段不会列出只读访问用户 有谁知道如何获取特

随机推荐

  • 带参数的 before_filter

    我有一个方法可以执行以下操作 before filter authenticate rights only gt show def authenticate rights project Project find params id red
  • 如何在命令中传递对象参数?

    我使用带有参数的新命令创建了 eclipse rcp 项目的plugin xml ArrayList
  • itertools.islice 与列表切片比较

    我一直在尝试应用一种算法根据特定标准将 python 列表缩小为较小的列表 由于原始列表的体积很大 大约有 100k 个元素 我尝试使用 itertools 来避免多次内存分配 所以我想出了这个 reducedVec F if sum 1
  • 使用 Bash 发出 POST 请求

    我有 100 个 Jetpack 必须登录才能配置 我正在尝试在 bash 脚本中执行此操作 但我没有运气 我可以毫无问题地连接到 wifi 但我的 POST 请求没有实现任何目标 有什么建议吗 这是我的 github 的链接 我有在 Bu
  • 构建给定文本中最常用单词的 ASCII 图表 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 挑战
  • 每个页面上都需要InitializeCulture()吗?

    我有一个需要本地化的网络表单网站 我的意思是 它是本地化的 我只需要根据域设置正确的语言即可 就像是 protected override void InitializeCulture var i Request Url Host ToLo
  • 如何分割文件并保留每个部分的第一行?

    Given 一个大文本数据文件 例如 CSV 格式 具有 特殊 第一行 例如字段名称 Wanted coreutils 的等价物split l命令 但附加要求原始文件中的标题行出现在每个结果片段的开头 我猜是一些混合物split and h
  • 如何查找整数数组中每个元素的排名

    我想找出数组中每个元素从0开始的排名 例如 arr 2 1 3 rank will be 1 0 2 解释 rank of 2 is 1 because 2 is greater than exactly 1 element rank of
  • 按钮控件和 TBitmap 的底层替代品,无需编写预混合代码即可正确处理 PNG 透明度

    Delphi 2010的TSpeedButtons似乎并没有真正正确支持PNG透明度 因为Glyph属性内部使用TBitmap 而TBitmap用于位图 并且不能正确支持PNG透明度 那么TSpeedButton Glyph就无法支持透明度
  • 中止 Linux 上的阻塞读取

    我在线程中运行的 Linux 中有一个阻塞读取 在程序关闭期间 我想使线程脱离此读取 不幸的是 我无法使用轮询或选择并编写正确的代码 因为读取的文件是不实现轮询 选择功能的设备驱动程序 作为临时解决方案 我当前通过 pthread kill
  • 将 Access 2010 转换为旧版本

    我希望能够使用脚本将 Access 2010 数据库转换为多个不同的旧版本 因此 如果我将 2010 Access 提供给脚本 我希望它输出以下版本之一 2000 2002 2003 或 2007 这怎么可能 我不是在寻找完整的脚本 而是在
  • gvim:轻松复制到系统剪贴板

    我在 Ubuntu 10 10 上使用 gVim 我想将文本复制 猛拉 到系统剪贴板 以便复制的文本可在其他应用程序中使用 这适用于 y 但我想让它与y 我尝试过绘制地图y to y但是之后yy不再工作 因为它产生 y y 我也尝试过 se
  • 可选类型注释。检查是否为 None 后使用值?

    我正在用 python 编写一些带有类型注释的代码 我对可选类型有疑问 例如对于这样的代码 maybe number Optional int definition if maybe number None else I know its
  • 如何重写 Java 中的类方法并向其添加“抛出”声明?

    Android 中是否有可能有一个 抛出 东西的 AsyncTask 如果我不 Override 该方法 则不会调用它 如果我在末尾添加 抛出 则会出现编译器错误 例如 我想做类似的事情 class testThrows extends A
  • 下载 SQL SERVER 代理 - Microsoft SQL Server

    我已下载 SQL SERVER MANAGEMENT STUDIO 但未找到 SQL SERVER AGENT 我应该单独安装吗 谁能告诉我免费软件 SQL SERVER AGENT 的下载链接吗 如果使用 SQL Server Manag
  • 在 C# 中以编程方式创建 Azure AD

    是否可以在 Azure 订阅中以编程方式创建 Azure Active Directory 我查看了 Azure 管理 API 可以看到创建 VM 数据库的方法 但没有看到 WAAD 的方法 如果可能 每个订阅可以创建多少个 WAAD 不可
  • ISerialized 是否向后兼容具有较少字段的类的早期版本?

    抱歉 如果我的问题措辞有点奇怪 基本上 我有一个可序列化的类 目前只有一个字段 但随着我们向系统添加功能 将来肯定会获得更多 序列化过程将用于将实例传递到 WCF 服务 以及从文件读取实例或将实例写入文件 当然 如果我不断用额外的字段更新类
  • 优化 C++ 模板执行

    我正在从事性能至关重要的项目 该应用程序正在处理大量数据 代码是用C 编写的 我需要做一些更改 给出了以下代码 这不是我的代码 我将其简化为最小 void process
  • HAML如何识别块的结尾?

    form for subject url gt action gt create do f render partial gt form locals gt f gt f form buttons submit tag Create Sub
  • Neo4j 使用属性过滤器通过多个关系定向路径

    作为 Cypher 和 Neo4j 的新手 我在为我的用例构建查询时遇到问题 我正在构建一个简单的 ACL 访问控制列表 并正在寻找一条通过权限关系向上层次结构的路径 一张图或许能更好地解释它 Key Users gt Blue Group