Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4J:交集和谓词_Neo4j_Cypher_Acl_Intersection_Predicates - Fatal编程技术网

Neo4J:交集和谓词

Neo4J:交集和谓词,neo4j,cypher,acl,intersection,predicates,Neo4j,Cypher,Acl,Intersection,Predicates,我正在从事一个涉及Neo4J Db的项目,我面临一个我自己无法解决的问题 我们在图形中处理Acl。每个Acl都链接到一组元数据。项目也链接到这些元数据。当链接到某个项的所有元数据也链接到该元数据时,元数据授予对该项的访问权 以下是图形模型的图片: 在本例中,ACL1授予对item1(但不是item2)的访问权,acl2授予对item2(但不是item1)的访问权 我认为诀窍是在链接到一个项的节点上使用ALL谓词,但我的尝试总是从图中返回所有项(因为它们共享一个元) 有人能帮我创建cypher查

我正在从事一个涉及Neo4J Db的项目,我面临一个我自己无法解决的问题

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

以下是图形模型的图片:

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

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

有人能帮我创建cypher查询以返回一个用户可以访问的所有项目吗

谢谢你的帮助,格雷戈里


PS:这是一个Neo4j控制台示例数据集:

使用
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
匹配(:User{Login:'User1})-[:是否授予]->(acl)-[:是否适用]->(meta)-[:是否适用]->(项)
使用item,将(meta)收集为userMetas
比赛(项目)