У меня есть коллекция MongoDB со следующими документами:
{
"name": "First parent",
"items": [
{ "name": "First child", "value": 32 },
{ "name": "Second child", "value": 76 },
{ "name": "Third child", "value": 13 }
]
}
{
"name": "Second parent",
"items": [
{ "name": "Fifth child", "value": 16 },
{ "name": "Sixth child", "value": 15 }
]
}
{
"name": "Third parent",
"items": [
{ "name": "Fourth child", "value": 56 }
]
}
Я хотел бы:
- Сортировать детей по
items.value
в каждом родительском элементе из (des c) , - Сортировать родителей по
items.value
первого (старшего) дочернего элемента (des c), - Добавить
items.order
каждому дочернему элементу.
Итак желаемый результат должен быть:
{
"name": "First parent",
"items": [
{ "name": "Second child", "value": 76, "order": 1 }, // Should be first in array, because 76 < 32 < 13. Should have order: 1, because 76 is highest value of all children in collection.
{ "name": "First child", "value": 32, "order": 3 },
{ "name": "Third child", "value": 13, "order": 6 }
]
}
{
"name": "Third parent",
"items": [
{ "name": "Fourth child", "value": 56, "order": 2 } // Should have order: 2, because 56 is second highest value of all children in collection.
]
}
{
"name": "Second parent",
"items": [
{ "name": "Fifth child", "value": 16, "order": 4 },
{ "name": "Sixth child", "value": 15, "order": 5 }
]
}
Есть ли способ сделать это? У меня только такой (без свойства items.order
):
db.collection.aggregate([
{ "$unwind": "$items" },
{ "$sort": { "items.value": -1 } },
{ "$group": {
"_id": "$_id",
"name": { "$first": "$name" },
"items": { "$push": "$items" }}
},
{ "$sort": { "items.value": -1 } }
])