Как я могу объединить несколько коллекций neo4j в 1? - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть следующие коллекции различных событий в моем приложении, в моем запросе и бизнес-логике были некоторые вещи, которые заставили меня разделить различные типы событий на отдельные коллекции:

ПРИМЕЧАНИЕ: коллекции имеют разныевозвращаемые узлы / рел.Например, обе коллекции могут вернуть :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 объединенные коллекции)

Бонусный вопрос: Можно ли отсортировать итоговую коллекцию?Я хочу иметь возможность сортировать конечный продукт по дате созданной даты (чтобы все отображалось по порядку).

Проблема в том, что я не могу объединить эти коллекции в одну коллекцию.Возможно ли или я правильно прочитал, что вы не можете объединять коллекции с разными узлами ?

1 Ответ

0 голосов
/ 03 февраля 2019

Определенно возможно, вы должны просто иметь возможность использовать оператор + между двумя коллекциями:

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

Тем не менее, вы, вероятно, должны иметь дело с каждым отдельно, а не со всеми сразу (совпадениечтобы собрать и собрать contactEvents, убедитесь, что у вас есть отдельный начальный узел, если он еще не был получен из агрегации, затем сопоставьте и соберите взаимные контакты, а затем объедините коллекции).

При условии, что ваш окончательный список является спискомобъектов карты, а дата created_at является свойством карт, вы можете использовать apoc.coll.sortMaps () из процедур APOC для выполнения сортировки.

...