我有以下节点结构::Unit
然后我有一个:Unit
id的数组:[197, 196, 19, 20, 191, 171, 3, 174, 194, 185]
我想检查是否已经存在一个与列表中所有:Unit
id都具有:INCLUDES
关系的:PublicList
。
我试着编写一个COUNT
和MATCH
查询,但这看起来像是一个容易出错的冗长方法:
MATCH (p:Patch)-[:INCLUDES]->(r:Roster)-[:HAS]-(d:PublicList)
WITH COLLECT(d) as drafts
UNWIND drafts as draft
WITH draft
UNWIND [197, 196, 19, 20, 191, 171, 3, 174, 194, 185] as unitID
MATCH (draft)-[:INCLUDES]->(u:Unit)
WHERE id(u) = unitID
WITH count(DISTINCT u) as draftUnits
WITH COLLECT(draftUnits) as matchCounts
RETURN matchCounts
如果:PublicList
与列表中的所有ID都有:INCLUDES
关系,那么它将返回一个布尔值。
2条答案
按热度按时间cuxqih211#
我建议首先匹配单元,将它们放入一个集合中,然后使用
ALL
predicate 检查PublicList是否与所有单元都有连接。如果您希望返回PublicList沿着一个布尔值(如果它与所有这些值都匹配),则可以进行如下微调
2jcobegt2#
您的查询看起来不错,但还可以改进。要修复它,您需要使用
而不是
后者是一个内部id函数,它对同一数据库中的所有其他节点使用唯一标识,而后者是一个简单的属性,名为:标识符