Neo4J:交集和谓词



我正在进行一个涉及Neo4J Db的项目,我面临着一个我自己无法解决的问题。

我们在图中处理Acl。每个Acl都链接到一组元数据。项目也链接到这些元数据。当链接到一个项目的所有元数据也链接到该元数据时,该元数据授予对该项目的访问权限。

以下是图形模型的图片:ACL图形图片

在本例中,ACL1授予对item1(但不是item2)的访问权限,而acl2授予对item2(但不是item1)的访问权。

我认为诀窍是在链接到一个项目的节点上使用ALL谓词,但我的尝试总是从图中返回所有项目(因为它们共享一个元)

有人能帮我创建密码查询,为一个用户返回他可以访问的所有项目吗?

谢谢你的帮助,Gregory

附言:这是一个Neo4j控制台示例数据集:http://console.neo4j.org/r/urjh64

使用ALL谓词是正确的方法。这个查询怎么样:

MATCH (:User { Login:'User1' })-[:IS_GRANTED]->(acl)-[:IS_APPLICABLE]->(meta)-[:IS_APPLICABLE]->(item)
WITH item, collect(meta) AS userMetas
MATCH (item)<-[:IS_APPLICABLE]-(meta2)
WITH item, userMetas, collect(meta2) AS itemMetas
WHERE ALL (x IN itemMetas   WHERE x IN userMetas)
RETURN item

首先,我们从用户导航到他可能访问的所有项目。对于候选人,我们返回并收集所有元。在WHERE中,我们确保项目的所有图元也可供用户使用。

相关内容

  • 没有找到相关文章

最新更新