我有一个简单的图形数据库,它包含两种类型。
博文 标签
BlogPost可以有很多标签。
我写了一篇BlogPost并给它4个标签。我想搜索至少包含这四个标签的其他BlogPost。
我试过
MATCH (b:BlogPost{id='156'})-[:tagged]->(original_tag)
WITH b, collect(original_tag) AS original_tags
MATCH (b2)-[:tagged]-(second_blog_tag)
WITH b, original_tags, collect(second_blog_tag) AS second_blog_tags, b2
WHERE original_tags IN second_blog_tags
RETURN b2.id
但行
WHERE original_tags IN second_blog_tags
错了。有人可以提供任何帮助吗?我在考虑使用收集是否正确或有更好的方法吗?
答案 0 :(得分:3)
试试这个:
MATCH (b:BlogPost{id='156'})-[:tagged]->(original_tag)
WITH b, collect(original_tag) AS original_tags
MATCH (b2)-[:tagged]-(second_blog_tag)
WITH b, original_tags, collect(second_blog_tag) AS second_blog_tags, b2
WHERE ALL(tag IN original_tags WHERE tag IN second_blog_tags)
RETURN b2.id
您也可以尝试:
MATCH (b:BlogPost{id='156'})-[:tagged]->(original_tag)<-[:tagged]-(b2:BlogPost)
WITH b, b2, count(distinct original_tag) as tagCount
WHERE tagCount = size((b)-[:tagged]->())
RETURN b2.id