2016-03-30 16 views
1

私は2つのタイプを含む簡単なグラフデータベースを持っています。Neo4J Cypherクエリ - INコレクション?

ブログ投稿 タグ

Aブログ投稿には、多くのタグを持つことができます。

私はBlogPostを書いて4つのタグを与えました。少なくともこれらの4つのタグを含む他のBlogPostsを検索したいと思います。

私はライン

WHERE original_tags IN second_blog_tags 

が間違っているしかし

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 

を試してみました。誰も助けを提供することはできますか?収集を正しく使用することについての私の考えは正しいのですか?

答えて

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 
+0

正しいと非常に有用 - どうもありがとうございました。私は2つのクエリからセットを比較する方法を理解するために熟考し、苦労しています。この答えは本当に私を助けてくれました – Airomega

関連する問題