如何解决Neo4j - 匹配具有多个强制节点的模式
我有 :Post
个节点,这些节点有多个 :Tag
节点,这些节点通过 :HAS_TAG
关系相连。
所有 :Tag
节点都有一个名为 name
的属性,它是特定标签的名称。
因此,一个帖子将有多个标签节点通过 :HAS_TAG
关系连接到该帖子。
现在,我想查询所有具有 all 标签的帖子,这些标签将在运行时提供。
例如,我想查找所有带有“HONDA”和“BIKES”标签的帖子。
我试过MATCH (p:Post)-[r:HAS_TAG]-(t:Tag) WHERE t.name in ['BIKES','HONDA'] RETURN p
。但它也会返回只有一个提供的标签名称的帖子。
解决方法
您需要收集每个帖子的所有标签,然后检查该列表中是否存在所有必需的标签。
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。