3

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.

1 Answer 1

2

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.

Sign up to request clarification or add additional context in comments.

1 Comment

@AryehArmon What doesn't work about it for you? Keep in mind that it sorts the documents, not the cars arrays within each document.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.