Я использую агрегат для выполнения некоторых операций, фильтров и сортировки. Проблема в том, что мне нужно отсортировать (кроме основной сортировки) элементы (объекты) внутри массива по одному из его значений. Я не хочу сортировать окончательный результат по этому массиву, мне просто нужно отсортировать массив. Итак, после поиска изображений мне нужно отсортировать изображения по «imageName», а затем продолжить операцию.
В результате изображения отображаются следующим образом: я хочу, чтобы они отображались в правильном порядке, в зависимости от поля «imageName»
"images": [
{
"_id": "5e9cd8f5207ef0c1687da948",
"cloudImage": "https:...",
"imageName": "image2",
"__v": 0,
"createdAt": "2020-04-19T23:04:21.582Z",
"updatedAt": "2020-04-19T23:04:21.582Z"
},
{
"_id": "5e9cd8f5207ef0c1687da949",
"cloudImage": "https:...",
"imageName": "image0",
"__v": 0,
"createdAt": "2020-04-19T23:04:21.583Z",
"updatedAt": "2020-04-19T23:04:21.583Z"
},
{
"_id": "5e9cd8f5207ef0c1687da94a",
"cloudImage": "https:...",
"imageName": "image1",
"__v": 0,
"createdAt": "2020-04-19T23:04:21.584Z",
"updatedAt": "2020-04-19T23:04:21.584Z"
}
],
Это агрегация:
let query = Shirt
.aggregate([
{
$lookup: {
from: Team.collection.name,
localField: 'team',
foreignField: '_id',
as: 'team',
},
},
{
$lookup: {
from: Comment.collection.name,
localField: 'comments',
foreignField: '_id',
as: 'comments',
},
},
{
$lookup: {
from: Image.collection.name,
localField: 'images',
foreignField: '_id',
as: 'images',
},
},
{
$addFields: { totalLikes: { "$size": "$likes" } }
},
{
$unwind: '$team'
},
{
$match: filters
},
{
$sort: sorted
},
{
"$project": {
"team": 1,
"title": 1,
"comments": 1,
"size": 1,
"year": 1,
"brand": 1,
"code": 1,
"description": 1,
"isLikedByUser": 1,
"isHome": 1,
"isFan": 1,
"images": 1,
"shirtUser": 1,
"likes": 1,
"createdAt": 1,
"updatedAt": 1
},
},
])
.collation({ locale: "es" })