我有一个时间轴类型查询,用于检索帖子以及"喜欢"帖子的用户.
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;
Run Code Online (Sandbox Code Playgroud)
我将检索到的帖子数量限制为25.我还想限制喜欢帖子的用户数量.有没有办法在查询中使用多个限制子句?理想情况下,我想做类似以下的事情:
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;
Run Code Online (Sandbox Code Playgroud)
要么:
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;
Run Code Online (Sandbox Code Playgroud)
这会将每个帖子的返回者的数量限制为6.如何实现这一目标?
限制类似的问题在于它位于查询的另一端,因此无法对其进行优化.你基本上要做两场比赛.此外,WITH之后的LIMIT仅在1.9.M01中可用
所以,我认为这样做符合你的要求:
START me=node:node_auto_index(UserIdentifier='USER0')
MATCH me-[rels:FOLLOWS*0..1]-myfriend-[:POSTED*]-statusupdates<-[r?:LIKE]-likers
WITH distinct likers
// you can also order by something here, if you want.
LIMIT 6
START me=node:node_auto_index(UserIdentifier='USER0')
// at this point, likers is already bound, so it's limited to the 6
MATCH me-[rels:FOLLOWS*0..1]-myfriend-[:POSTED*]-statusupdates<-[r?:LIKE]-likers
RETURN distinct statusupdates, likers, myfriend
ORDER BY statusupdates.postTime
LIMIT 25;
Run Code Online (Sandbox Code Playgroud)
未经测试的代码.希望它有效 - 下次在控制台中为我们建立样本,以便我们可以玩.:)
小智 5
在Neo4j 2.0中,您可以使用集合切片。也就是说,您可以执行类似的查询
MATCH (n)-[r*0..1]-(x) RETURN n, LABELS(n), COLLECT([x,id(x),LABELS(x),r])[0..10] LIMIT 5
上面的示例将返回多达5个n节点,每个n节点在集合中每个具有0至10个相关节点。