Виждам проблема. Хората търсят и намират този отговор на stackoverflow:
Грешно е, тъй като никога не „реконструира“ масива.
Правите това с $group
и $push
, и тъй като групирате, ще искате $firstкод>
за другите полета в документа, който искате:
db.TrafficStatistic.aggregate([
{ "$unwind": "$statistic" },
{ "$sort": { "_id": 1, "statistic.data.desktop.users": 1 } },
{ "$group": {
"_id": "$_id",
"monthStart" : { "$first": "$monthStart" },
"monthEnd" : { "$first": "$monthEnd" },
"date" : { "$first": "$date" },
"statistic": { "$push": "$statistic" }
}}
])
Обърнете внимание и на $sort
се прилага както към "_id"
и другото поле за сортиране. Това е така, че сортирането се прилага за всеки документ и е важно, когато детайлите на документа се събират обратно в $group
.
Сега документът изглежда по същия начин, но този път членовете на масива са сортирани.