Saya melihat masalahnya. Orang-orang mencari dan menemukan jawaban stackoverflow ini:
Itu salah, karena tidak pernah "merekonstruksi" array.
Anda melakukannya dengan $group
dan $push
, dan karena Anda mengelompokkan, Anda akan menginginkan $first
untuk bidang lain dalam dokumen yang Anda inginkan:
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" }
}}
])
Perhatikan juga $sort
diterapkan ke "_id"
dan bidang lainnya untuk diurutkan. Ini agar penyortiran diterapkan per dokumen dan penting ketika detail dokumen disatukan kembali di $group
.
Sekarang dokumen terlihat sama seperti sebelumnya, tetapi kali ini anggota array diurutkan.