Widzę problem. Ludzie szukają i znajdują tę odpowiedź na przepełnienie stosu:
To źle, ponieważ nigdy nie „rekonstruuje” tablicy.
Robisz to za pomocą $group
i $push
, a ponieważ grupujesz, będziesz chciał $first
dla innych pól w żądanym dokumencie:
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" }
}}
])
Zwróć także uwagę na $sort
jest stosowany do obu "_id"
a drugie pole do sortowania. Dzieje się tak dlatego, że sortowanie jest stosowane według dokumentu i jest ważne, gdy szczegóły dokumentu są umieszczane z powrotem w $group
.
Teraz dokument wygląda tak samo jak wcześniej, ale tym razem elementy tablicy są posortowane.