我有一个活动节点(a)
,它指向(:Something)
,可以通过与:LIKE
的直接:User 'me'
关系进行匹配 OR a {通过:LIKE
建立的{1}}关系。
第一个关系可以描述为:
:FRIEND
第二种关系可以描述为:
MATCH (a)-[:REF]->(:Something)<-[:LIKE]-(:User {user: 'me'})
我将如何对所有不同的活动节点MATCH (a)-[:REF]->(:Something)<-[:LIKE]-(:User)<-[:FRIEND]-(:User {user: 'me'})
进行分组,以便可以按时间戳对完整列表进行排序?看起来像这样:
(a)
答案 0 :(得分:1)
您可以使用the variable-length pattern matching:
// u = node "me" or the node "friend"
MATCH
(:User {user: 'me'})-[:FRIEND*0..1]->(u:User)
MATCH
(a)-[:REF]->(:Something)<-[:LIKE]-(u)
RETURN DISTINCT a
ORDER BY a.ts DESC
更新:如果查询完全不同,则可以收集第一个查询的结果,然后收集第二个查询的结果,汇总并展开:
MATCH
(a1)-[:REF]->(:Something)<-[:OWN]-(:User {user: 'me'})
WITH
collect(DISTINCT a1) AS ac1
MATCH
(a2)-[:REF]->(:Something)<-[:INCLUDES]-(:SomethingElse)<-[:LIKE]-(:User {user: 'me'})
WITH
ac1, collect(DISTINCT a2) AS ac2
UNWIND
ac1 + ac2 AS a
RETURN DISTINCT a
ORDER BY a.ts DESC