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
我有 :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