MongoDB sorting by nested object value

dzm picture dzm · Aug 20, 2012 · Viewed 21.9k times · Source

I'm trying to sort results based on the values of a nested object. Using node-mongodb-native, I'm doing this:

    this.collection.find({
          "_id": ObjectID(item_id) }, 
        { "items": 1 },
        { sort : { items.date : 1 }
    }, function(err, result) {
        if (err) {
            callback(err);
        } else {
            callback(null, result);
        }
    });

I get an unexpected token error for items.date.

items is an array of objects. Some documents it's an empty array, others it contains data, which contains a date field.

Thank you!

Answer

JohnnyHK picture JohnnyHK · Aug 20, 2012

When using dot notation you need to put the key value in quotes, so your sort object should look like this instead:

sort: {
    "items.date" : 1
}

That will sort ascending by minimum date value in each doc's items array