У меня есть следующие данные в моей коллекции персонажей:
[
{
"_id": "1",
"type": "warrior",
"attributes": [
{ "name": "strength", "value": 110 },
{ "name": "dexterity", "value": 50 },
{ "name": "health", "value": 200 }
]
},
{
"_id": "2",
"type": "archer",
"attributes": [
{ "name": "precision", "value": 70 },
{ "name": "dexterity", "value": 80 },
{ "name": "health", "value": 150 }
]
},
{
"_id": "3",
"type": "warrior",
"attributes": [
{ "name": "strength", "value": 80 },
{ "name": "dexterity", "value": 80 },
{ "name": "health", "value": 220 }
]
},
{
"_id": "4",
"type": "wizard",
"attributes": [
{ "name": "power", "value": 100 },
{ "name": "dexterity", "value": 100 },
{ "name": "health", "value": 120 }
]
},
{
"_id": "5",
"type": "monk",
"attributes": [
{ "name": "strength", "value": 50 },
{ "name": "intelligence", "value": 120 },
{ "name": "health", "value": 180 }
]
},
{
"_id": "6",
"type": "warrior",
"attributes": [
{ "name": "strength", "value": 90 },
{ "name": "dexterity", "value": 75 },
{ "name": "health", "value": 200 }
]
}
]
Примечание: "атрибуты" - это денормализованный массив объектов (имя + значение) в моей модели.
Я пишууниверсальный сервис, позволяющий пользователям фильтровать мои данные.Этот сервис динамически создает мой «совокупный» запрос в соответствии с пользовательским вводом (выбор, условия, сортировка и т. Д.).
Я хочу вернуть всех воинов, упорядоченных по убыванию идентификатора.Сгенерированный запрос будет:
Characters.aggregate().match({ "type": "warrior" }).sort({ "_id": -1 });
Ожидаемые результаты:
[
{
"_id": "6",
"type": "warrior",
"attributes": [
{ "name": "strength", "value": 90 },
{ "name": "dexterity", "value": 75 },
{ "name": "health", "value": 200 }
]
},
{
"_id": "3",
"type": "warrior",
"attributes": [
{ "name": "strength", "value": 80 },
{ "name": "dexterity", "value": 80 },
{ "name": "health", "value": 220 }
]
},
{
"_id": "1",
"type": "warrior",
"attributes": [
{ "name": "strength", "value": 110 },
{ "name": "dexterity", "value": 50 },
{ "name": "health", "value": 200 }
]
}
]
Теперь я хотел бы отобразить список воинов, упорядоченных по возрастанию.Я не могу отсортировать по определенному элементу моего денормализованного массива «атрибуты», и это моя проблема.
Ожидаемые результаты:
[
{
"_id": "3",
"type": "warrior",
"attributes": [
{ "name": "strength", "value": 80 },
{ "name": "dexterity", "value": 80 },
{ "name": "health", "value": 220 }
]
},
{
"_id": "6",
"type": "warrior",
"attributes": [
{ "name": "strength", "value": 90 },
{ "name": "dexterity", "value": 75 },
{ "name": "health", "value": 200 }
]
},
{
"_id": "1",
"type": "warrior",
"attributes": [
{ "name": "strength", "value": 110 },
{ "name": "dexterity", "value": 50 },
{ "name": "health", "value": 200 }
]
}
]
Как мне получить этот результат?