MongooseJS - How to find the element with the maximum value? MongooseJS - How to find the element with the maximum value? mongoose mongoose

MongooseJS - How to find the element with the maximum value?


Member  .findOne({ country_id: 10 })  .sort('-score')  // give me the max  .exec(function (err, member) {    // your callback code  });

Check the mongoose docs for querying, they are pretty good.

If you dont't want to write the same code again you could also add a static method to your Member model like this:

memberSchema.statics.findMax = function (callback) {  this.findOne({ country_id: 10 }) // 'this' now refers to the Member class    .sort('-score')    .exec(callback);}

And call it later via Member.findMax(callback)


You do not need Mongoose documentation to do this.Plain MongoDb will do the job.

Assume you have your Member collection:

{ "_id" : ObjectId("527619d6e964aa5d2bdca6e2"), "country_id" : 10, "name" : "tes2t", "score" : 15 }{ "_id" : ObjectId("527619cfe964aa5d2bdca6e1"), "country_id" : 10, "name" : "test", "score" : 5 }{ "_id" : ObjectId("527619e1e964aa5d2bdca6e3"), "country_id" : 10, "name" : "tes5t", "score" : -6 }{ "_id" : ObjectId("527619e1e964aa5d2bdcd6f3"), "country_id" : 8, "name" : "tes5t", "score" : 24 }

The following query will return you a cursor to the document, you are looking for:

 db.Member.find({country_id : 10}).sort({score : -1}).limit(1)


It might be faster to use find() than findOne().

With find().limit(1) an array of the one document is returned. To get the document object, you have to do get the first array element, maxResult[0].

Making Salvador's answer more complete ...

var findQuery = db.Member.find({country_id : 10}).sort({score : -1}).limit(1);findQuery.exec(function(err, maxResult){    if (err) {return err;}    // do stuff with maxResult[0]});