Слияние результатов Mongoose
У меня есть результат Mongoose Query:
[ { _id: 523ab1be60239c8120000001,
posts:
[ { _id: 523ab1be60239c8120000002,
creator: 523ab1be60239c8120000001,
listingType: 'lease',
title: 'My Second Listing - Made By Person 1',
__v: 0 } ] },
{ _id: 523ab1e224bfaea520000001,
posts:
[ { _id: 523ab1e224bfaea520000002,
creator: 523ab1e224bfaea520000001,
listingType: 'lease',
title: 'My Second Listing - Made By Person 2',
__v: 0 },
{ _id: 523ab865ae55497d27000001,
creator: 523ab1e224bfaea520000001,
listingType: 'free',
title: 'My Third Listing - Made By Person 2',
__v: 0 } ] } ]
Я хочу иметь возможность хранить все posts
в одном массиве или объекте, чтобы я мог отсортировать их по их _id
(отметка времени) и отображать их пользователю гораздо проще.
Есть идеи, как этого добиться? Я думаю о том, чтобы сделать цикл для каждого сообщения и выполнить какой-то алгоритм сортировки, чтобы достичь этого, но просто словом "цикл" это уже звучит неэффективно.
1 ответ
Если бы вы хотели отсортировать документы сами, я бы сказал, использовать функцию MongoDB sort(). Однако, поскольку вы хотите извлечь часть документов, объединить их в один объект и отсортировать, есть несколько вариантов, и я не уверен, какие из них будут работать лучше всего.
Если вы сохраните свой запрос таким, какой он есть, тогда у вас действительно есть выбор сортировки только на стороне приложения, используя какой-то цикл.
Вероятно, самый чистый способ сделать это - использовать структуру агрегации. В зависимости от того, каким был ваш исходный запрос, вы, вероятно, можете преобразовать его в $match
операция и использовать его первым в вашем конвейере. Тогда вы должны быть в состоянии $unwind
массив 'posts', $sort
по метке времени и $group
они снова вместе в один массив.