Neo4J Cypher查询 - IN集合?

时间:2016-03-30 15:02:44

标签: neo4j cypher

我有一个简单的图形数据库,它包含两种类型。

博文 标签

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

错了。有人可以提供任何帮助吗?我在考虑使用收集是否正确或有更好的方法吗?

1 个答案:

答案 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