在类似Twitter的应用程序中,我想只获得最后一个用于特定HASHTAG(A,B,C,D,E)发布推文的3个USERS
START me=node(X), hashtag=node(A,B,C,D,E)
MATCH n-[USED_IN]->tweet<-[p:PUBLISH]-user-[FRIEND_OF]->me
WITH p.date? AS date,hashtag,user ORDER BY date DESC
WITH hashtag, COLLECT(user.name) AS users
RETURN hashtag._id, users;
这是我通过此查询得到的结果。这很好,但如果朋友列表很大,我可以在第二列中有一个非常大的数组。
+-------------------------------------------+
| hashtag | users |
+-------------------------------------------+
| "paradis" | ["Alexandre","Paul"] |
| "hello" | ["Paul"] |
| "public" | ["Alexandre"] |
+-------------------------------------------+
如果我添加LIMIT子句,则在查询结束时,整个结果集都是有限的。
因为用户可以拥有大量的朋友,所以我不想取回所有这些用户,而只想回复那些在这些主题标签中发布的2或3
使用filter / reduce的任何解决方案都能达到我的预期吗?
运行neo4j 1.8.2
答案 0 :(得分:3)
将开始访问子集合,
同时您可以使用此解决方法:http://console.neo4j.org/r/f7lmtk
start n=node(*)
where has(n.name)
with collect(n.name) as names
return reduce(a=[], x in names : a + filter(y in [x] : length(a)<2)) as two_names
Reduce
用于在聚合器中构建结果列表
并使用filter
代替仅在2.0
case ... when ...
filter(y in [x] : length(a)<2)
在条件为true时返回包含元素的列表,在条件为false时返回空列表
将结果添加到累加器reduce
以递增方式构建列表
答案 1 :(得分:0)
请注意,新的过滤器语法为:
过滤器(x IN a.array WHERE length(x)= 3)