2017-04-01 6 views
0

この作業クエリを皮切り:カウントを使用してWHEREをフィルタリングするにはどうすればよいですか?

MATCH (post:Post)<-[:AUTHOR]-(author:User) 
    WHERE post.createdAt > { hotAfter } AND post.text =~ { keyword } 
    MATCH (post)-[:HAS_COMMENT]->(comment:Comment)<-[:AUTHOR]-(commentAuthor:User) 
    WITH post, author, count(DISTINCT commentAuthor) as participantsCount, count(comment) as commentsCount 
    ORDER BY (participantsCount * commentsCount) DESC 
    RETURN collect(post {.*, author, participantsCount, commentsCount})[0..{ LIMIT }] as posts 

私はさらに基準に適合したコメントの数とポストをフィルタリングしたいと思います:

WHERE (count(DISTINCT commentAuthor) * count(comment)) <= { someNumber } 

しかし、私は適用する場所/方法がわかりませんこの論理これは間違っています:

MATCH (post:Post)<-[:AUTHOR]-(author:User) 
    WHERE post.createdAt > { hotAfter } AND post.text =~ { keyword } 
    MATCH (post)-[:HAS_COMMENT]->(comment:Comment)<-[:AUTHOR]-(commentAuthor:User) 
    WHERE count(DISTINCT commentAuthor) * count(comment) <= 10 
    WITH post, author, count(DISTINCT commentAuthor) as participantsCount, count(comment) as commentsCount 
    ORDER BY (participantsCount * commentsCount) DESC 
    RETURN collect(post {.*, author, participantsCount, commentsCount})[0..{ LIMIT }] as posts 

答えて

1

MATCH (post:Post)<-[:AUTHOR]-(author:User) 
WHERE post.createdAt > { hotAfter } AND post.text =~ { keyword } 
MATCH (post)-[:HAS_COMMENT]->(comment:Comment)<-[:AUTHOR]-(commentAuthor:User) 
WITH post, author, count(DISTINCT commentAuthor) as participantsCount, count(comment) as commentsCount 
WITH post, author, participantsCount, commentsCount, participantsCount * commentsCount as countProduct 
ORDER BY countProduct DESC 
WHERE countProduct <= { someNumber } 
RETURN collect(post {.*, author, participantsCount, commentsCount})[0..{ LIMIT }] 
+0

こんにちは、実際にはこれを試してみて、クエリが無効であると表示されます。 – kayla

+0

エラーの詳細を教えていただけますか? – InverseFalcon

+0

'無効な入力 'D'(行6、列5(オフセット:308)) " ORDER BY参加者数* commentsCount DESC " ^' – kayla

0

最後のコレクションでフィルタリングが動作しているようです。あなたがして注文を行う前に、WHERE句としてこれを追加することができます

MATCH (post:Post)<-[:AUTHOR]-(author:User) 
    WHERE post.createdAt > { hotAfter } AND post.text =~ { keyword } 
    MATCH (post)-[:HAS_COMMENT]->(comment:Comment)<-[:AUTHOR]-(commentAuthor:User) 
    WITH post, author, count(DISTINCT commentAuthor) as participantsCount, count(comment) as commentsCount 
    ORDER BY (participantsCount * commentsCount) DESC 
    RETURN filter (
    x in collect(post {.*, author, participantsCount, commentsCount}) 
    WHERE (x.participantsCount * x.commentsCount) <= { someNumber } 
)[0..{ LIMIT }] as posts 
関連する問題