Neo4j - 匹配具有多个强制节点的模式

Neo4j - Match a pattern with multiple mandetory nodes

我有 :Post 个节点,这些节点有多个 :Tag 个节点与 :HAS_TAG 个关系相连。

所有 :Tag 节点都有一个名为 name 的 属性,这是特定标签的名称。

因此,一个 post 将有多个标签节点连接到具有 :HAS_TAG 关系的 post。

现在,我想查询所有具有 all 标签的 post,这些标签将在运行时提供。

例如,我想找到所有包含“HONDA”和“BIKES[=36] 的帖子 =]' 标签。

我试过了MATCH (p:Post)-[r:HAS_TAG]-(t:Tag) WHERE t.name in ['BIKES','HONDA'] RETURN p。但它也 returns posts 只有一个提供的标签名称。

您需要收集每个 post 的所有标签,然后检查该列表中是否存在所有必需的标签。

MATCH (p:Post)-[r:HAS_TAG]->(t:Tag)  
WITH p, collect(t.name) as tags 
WHERE ALL(tag in ['BIKES', 'HONDA'] WHERE tag IN tags)  
RETURN p

参考:https://neo4j.com/docs/cypher-manual/current/functions/predicate/#functions-all