#mongodb #mongoose #mongodb-query #aggregation-framework #spring-data-mongodb
Вопрос:
Мне нужно отсортировать документ по цене, а цена — это массив, пока мы сортируем цену на основе ключа PRICE_A, PRICE_B или PRICE_C. пример данных:
[
{
"_id": 1,
"price": [
{
"PRICE_A": 3098.67
},
{
"PRICE_B": 3166.67
},
{
"PRICE_C": 3800
}
]
},
{
"_id": 2,
"price": [
{
"PRICE_A": 679.6
},
{
"PRICE_B": 781.6
},
{
"PRICE_C": 938
}
]
}
]
ожидаемый результат: в порядке возрастания_a
[
{
"_id":2,
"price":[
{
"PRICE_A":679.6
},
{
"PRICE_B":781.6
},
{
"PRICE_C":938
}
]
},
{
"_id":1,
"price":[
{
"PRICE_A":3098.67
},
{
"PRICE_B":3166.67
},
{
"PRICE_C":3800
}
]
}
]
Я использую этот запрос —
https://mongoplayground.net/p/Ajaw4SFVpzg
Ответ №1:
Прямого способа сделать это нет, вам нужно улучшить дизайн вашей схемы, иначе этот запрос повлияет на производительность,
$addFields
для создания нового настраиваемого поляp
$arrayElemAt
чтобы получить первое значение цены, передав его ключевое имя, здесь вы должны передать свое динамическое имя ценового ключа$sort
поp
возрастанию$unset
удалитьp
ключ, потому что он сейчас не нужен
{
"$addFields": {
"p": { "$arrayElemAt": ["$price.PRICE_A", 0] }
}
},
{ "$sort": { "p": 1 } },
{ "$unset": "p" }