我有一个示例图,如下所示。
User
Attribute
Object
节点(a)与(d)和(e)
有关系我想检查哪个Object
节点(h)和(i)与所有用户所连接的Attribute
节点的关系,即(d)和(e)。
所以
如何在Cypher查询中检测到这一点?
我开始使用类似的东西:
MATCH p1 = (u:User)-->(ua:Attribute)-->(oa:Attribute)
WITH *
MATCH p2 = (oa)<-[*]-(o:Object)
RETURN p1,p2
这给了我完整的图表。但是我如何改进这个以仅得到(h)而不是(i)。
我想我必须从第一部分建立一个结果列表,并验证所有这些结果是否存在?
答案 0 :(得分:2)
您可以使用ALL
谓词
// First retrieve the Attribute nodes the User is connected to and make it a collection
MATCH (u:User)-[:ASSOCIATED_TO]->(attribute)
WITH u, collect(attribute) AS attributes
// Find the objects having relationships to ALL elements in attributes
MATCH (o:Object) WHERE
ALL( x IN attributes WHERE (o)--(x) )
RETURN u, attributes, collect(o) AS objects