1

我有一个这样的查询:

MATCH (a)-[:Shout]->(b)
WHERE a.user_id=1
WITH b.post_id as b_post_id, a, b.post as b_post
MATCH (a)-[:Friend]->(c)-[:Shout]->(d)
WITH d.post_id as d_post_id, b_post_id, d.post as d_post, b_post
order by d_post_id desc, b_post_id desc
RETURN collect(distinct d_post) + collect(distinct b_post) as p

我想返回来自用户和朋友的所有帖子,所以我结合了 2 个匹配,第一个匹配(a)-[:Shout]->(b)将返回来自用户的帖子,第二个匹配(a)-[:Friend]->(c)-[:Shout]->(d)将返回来自朋友的帖子。

的帖子(a)-[:Shout]->(b)

post_id: 5, post: nana
post_id: 2, post: hi

的帖子(a)-[:Friend]->(c)-[:Shout]->(d)

post_id: 6, post: lala
post_id: 4, post: hello
post_id: 3, post: hanson

所以,当我RETURN collect(distinct d_post) + collect(distinct b_post) as p,它将是 P: nana, hi, lala, hello, hanson

它应该是:lala, nana, hello, hanson, hi6,5,4,3,2

请帮我。谢谢。

4

2 回答 2

1

像这样的东西怎么样

MATCH (a {user_id:1})-[:Friend*0..1]->()-[:Shout]->(b)
WITH b.post_id as post_id, b.post as post ORDER BY post_id desc
RETURN collect(post) as posts

编辑

根据评论,如果您想返回节点的 id,-[:Shout]->(b)您可以为可选的朋友地点添加标识符

MATCH (a {user_id:1})-[:Friend*0..1]->(friendOrUser)-[:Shout]->(b)
WITH friendOrUser, b ORDER BY b.post_id desc
RETURN friendOrUser.user_id, b.post

这里friendOrUser绑定了用户a和他的朋友。

于 2014-03-06T13:35:33.773 回答
0

下面试试。查询不是很干净,但可以完成这项工作。

MATCH (a)-[:Shout]->(b)
WHERE a.user_id=1
WITH b,a
MATCH (a)-[:Friend]->(c)-[:Shout]->(d)
WITH b,d
MATCH (dummy) WHERE (dummy = b OR dummy = d) 
WITH dummy ORDER BY dummy.post_id DESC
RETURN collect(distinct dummy.post) AS p
于 2014-03-06T06:51:53.630 回答