如何将多个neo4j集合合并到1个中?

时间:2019-02-02 22:11:00

标签: neo4j cypher graph-databases

我在我的应用程序不同的事件以下集合,有我的查询和业务逻辑的一些事情,让我单独的不同类型的事件成单独的集合:

注意:集合具有返回的不同节点/ rel。例如,两个集合可能都返回了:User,但只有1个可能有新的消息通知。

FriendEvents [ { id: 'friend_id', status: 'new_friend', otherNode: {} } ]

WITH { event: newContactRequest, contactUser: contactUser } as contactEvents

MutualFriendEvents [ { id: 'mutual_id' status: 'new_mutual_friend_request', differentNode: {} } ]

WITH { event: newMutualContactRequest, contactUser: mutualContactUser } as mutualContactEvents


以上是我已被返回的集合。下面是我收集的事件:

COLLECT(distinct contactEvents) as contactEvents, collect(distinct mutualContactEvents) as mutualContactEvents

我该怎么做:return allActivitiesInTheOneList = contactEvents += mutualContactEvents(这样allActivitiesInTheOneList = 2个合并的集合)

奖励问题:是否可以对最终收藏进行排序?我希望能够按created_at日期对最终产品进行排序(以便按顺序显示事物)。

的问题是,我似乎无法这些集合合并到1个集合。可能是还是我读对了,因为您无法将集合与其他节点合并

1 个答案:

答案 0 :(得分:0)

绝对有可能,您应该只能在两个集合之间使用+运算符:

WITH COLLECT(distinct contactEvents) + collect(distinct mutualContactEvents) as allEvents
...

也就是说,您可能应该分别处理每个事件,而不要一次全部处理(匹配并收集contactEvents,如果尚未从聚合中获取它,请确保您具有不同的起始节点,然后匹配并收集相互联系事件,然后合并集合。)

如果最终列表是地图对象列表,并且created_at日期是地图的属性,则可以使用apoc.coll.sortMaps()中的APOC Procedures进行排序。