I have a timeline type query that retrieves posts and athe users who have ‘liked’ a post.
START me=node:node_auto_index(UserIdentifier='USER0')
MATCH me-[rels:FOLLOWS*0..1]-myfriend
WITH myfriend
MATCH myfriend-[:POSTED*]-statusupdates<-[r?:LIKE]-likers
WHERE myfriend <> statusupdates
RETURN distinct statusupdates, FILTER (x in collect(distinct likers) : x <> null), myfriend
ORDER BY statusupdates.PostTime DESC
LIMIT 25;
I limit the number of posts that I retrieve to 25. I would also like to limit the number of users who have liked a post. Is there a way to use multiple limit clauses in a query? Ideally I would like to do something like the following:
START me=node:node_auto_index(UserIdentifier='USER0')
MATCH me-[rels:FOLLOWS*0..1]-myfriend
WITH myfriendMATCH myfriend-[:POSTED*]-statusupdates<-[r?:LIKE]-likers
WHERE myfriend <> statusupdates
RETURN distinct statusupdates, LIMIT FILTER (x in collect(distinct likers) : x <> null) 6, myfriend
ORDER BY statusupdates.PostTime DESC
LIMIT 25;
Or:
START me=node:node_auto_index(UserIdentifier='USER0')
MATCH me-[rels:FOLLOWS*0..1]-myfriend
WITH myfriendMATCH myfriend-[:POSTED*]-statusupdates<-[r?:LIKE]-likers
WHERE myfriend <> statusupdates
RETURN distinct statusupdates, FILTER (x in collect(distinct likers) : x <> null), myfriend
LIMIT likers 6
ORDER BY statusupdates.PostTime DESC
LIMIT 25;
Which would limit the number of returned likers for each post to 6. How can I achieve this?
The trouble with limiting likers is that it’s on the other end of the query, so there’s no way to optimize that. You basically have to do two matches. Also, the LIMIT after the WITH is only available in 1.9.M01
So, I think this sort of does what you want:
Untested code. Hope it works–next time build us a sample in console so we can play around. 🙂