Neo4J:交集和谓词
Neo4J : intersection and predicates
我正在做一个涉及 Neo4J Db 的项目,我遇到了一个我自己无法解决的问题。
我们正在处理图中的 Acl。每个 Acl 都链接到一组元数据。项目也链接到这些元数据。当链接到项目的所有元数据也链接到元数据时,元数据授予对项目的访问权限。
这是图形模型的图片:
ACL graph picture
在此示例中,ACL1 授予对 item1(但不是 item2)的访问权限,acl2 授予对 item2(但不是 item1)的访问权限。
我认为诀窍是在链接到一个项目的节点上使用 ALL 谓词,但我的尝试总是 return 图中的所有项目(因为它们共享一个元)
有人可以帮助我为一个用户创建他可以访问的所有项目的 return 密码查询吗?
感谢你的帮助,格雷戈里
PS:这是一个 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
中,我们确保该项目的所有元数据也对用户可用。
我正在做一个涉及 Neo4J Db 的项目,我遇到了一个我自己无法解决的问题。
我们正在处理图中的 Acl。每个 Acl 都链接到一组元数据。项目也链接到这些元数据。当链接到项目的所有元数据也链接到元数据时,元数据授予对项目的访问权限。
这是图形模型的图片: ACL graph picture
在此示例中,ACL1 授予对 item1(但不是 item2)的访问权限,acl2 授予对 item2(但不是 item1)的访问权限。
我认为诀窍是在链接到一个项目的节点上使用 ALL 谓词,但我的尝试总是 return 图中的所有项目(因为它们共享一个元)
有人可以帮助我为一个用户创建他可以访问的所有项目的 return 密码查询吗?
感谢你的帮助,格雷戈里
PS:这是一个 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
中,我们确保该项目的所有元数据也对用户可用。