Jag ser problemet. Människor söker efter och hittar detta stackoverflow-svar:
Det är fel, eftersom det aldrig "rekonstruerar" arrayen.
Det gör du med $group
och $push
, och eftersom du grupperar vill du ha $first
för de andra fälten i dokumentet du vill ha:
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" }
}}
])
Observera även $sort
tillämpas på både "_id"
och det andra fältet att sortera. Detta är så att sorteringen tillämpas per dokument och är viktig när dokumentdetaljerna sätts ihop igen i $group
.
Nu ser dokumentet ut som det gjorde, men den här gången är arraymedlemmarna sorterade.