Given the data structure (based on my model) below how would I go about sorting the collection by cars.year in desc order with mongoose? So that first I find the max year in the cars array and then sort the collection by that.
{ "_id" : 1234,
"dealershipName": "Eric’s Mongo Cars",
"cars": [
{"year": 2013,
"make": "10gen",
"model": "MongoCar",},
{"year": 1985,
"make": "DeLorean",
"model": "DMC-12",}
]
},
{ "_id" : 1235,
"dealershipName": "Eric’s Mongo Cars",
"cars": [
{"year": 2015,
"make": "10gen",
"model": "MongoCar",},
{"year": 12001,
"make": "DeLorean",
"model": "DMC-12",}
]
}
I tried something like this with the aggregation function, but $unwind duplicates my results for each element in the cars array.
MyModel
.aggregate([{
$unwind: "$cars"
}, {
$project: {
...
year: '$cars.year',
}
}, {
$sort: {
year: -1
}
}])
.exec(function ...)
Is there a better or more efficient way to go about doing this?
Thanks in advance for your help.
What you're looking for is the standard behavior when sorting by a field in an array.
MyModel.find().sort('-cars.year').exec(function(err, docs) {...});
This will sort the docs descending using the maximum value of year in the elements of cars from each doc.
When sorting ascending, the minimum value is used.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With