Comment sortinger en mongoose?

Je ne trouve aucun doc pour le modificateur de sorting. La seule idée est dans les tests unitaires: https://github.com/LearnBoost/mongoose/blob/master/tests/unit/spec.lib.query.js

 writer.limit (5) .sort (['test', 1]). group ('name')

Mais ça ne marche pas pour moi:

 
 Post.find (). Sort (['updatedAt', 1]);

C’est comme ça que je me suis débrouillé pour travailler dans mongoose 2.3.0 🙂

// Find First 10 News Items News.find({ deal_id:deal._id // Search Filters }, ['type','date_added'], // Columns to Return { skip:0, // Starting Row limit:10, // Ending Row sort:{ date_added: -1 //Sort by Date Added DESC } }, function(err,allNews){ socket.emit('news-load', allNews); // Do something with the array of 10 objects }) 

Dans Mongoose, un sorting peut être effectué de l’une des manières suivantes:

 Post.find({}).sort('test').exec(function(err, docs) { ... }); Post.find({}).sort([['date', -1]]).exec(function(err, docs) { ... }); Post.find({}).sort({test: 1}).exec(function(err, docs) { ... }); Post.find({}, null, {sort: {date: 1}}, function(err, docs) { ... }); 

Essayer:

 Post.find().sort([['updatedAt', 'descending']]).all(function (posts) { // do something with the array of posts }); 

À partir de Mongoose 3.8.x:

 model.find({ ... }).sort({ field : criteria}).exec(function(err, model){ ... }); 

Où:

criteria peuvent être asc , desc , ascending , descending , 1 ou -1

Mettre à jour

Il y a une meilleure description si cela déroute les gens; consultez la recherche de documents et le fonctionnement des requêtes dans le manuel de mongoose. Si vous souhaitez utiliser l’API couramment utilisée, vous pouvez obtenir un object de requête en ne fournissant pas de rappel à la méthode find() , sinon vous pouvez spécifier les parameters tels que décrits ci-dessous.

Original

Étant donné un object de model , d’après les documents de Model , cela peut fonctionner pour 2.4.1 :

 Post.find({search-spec}, [return field array], {options}, callback) 

La search spec attend un object, mais vous pouvez transmettre un object null ou vide.

Le second paramètre est la liste de champs sous forme de tableau de chaînes, vous devez donc fournir ['field','field2'] ou null .

Le troisième paramètre est les options en tant qu’object, ce qui inclut la possibilité de sortinger le jeu de résultats. Vous utiliseriez { sort: { field: direction } }field est le test field la chaîne (dans votre cas) et la direction est un nombre où 1 est croissant et -1 est en train de se désister.

Le dernier paramètre ( callback ) est la fonction de rappel qui reçoit la collection de documents renvoyés par la requête.

L’ Model.find() (à cette version) fait une atsortingbution glissante de propriétés pour gérer les parameters optionnels (ce qui m’a déconcerté!):

 Model.find = function find (conditions, fields, options, callback) { if ('function' == typeof conditions) { callback = conditions; conditions = {}; fields = null; options = null; } else if ('function' == typeof fields) { callback = fields; fields = null; options = null; } else if ('function' == typeof options) { callback = options; options = null; } var query = new Query(conditions, options).select(fields).bind(this, 'find'); if ('undefined' === typeof callback) return query; this._applyNamedScope(query); return query.find(callback); }; 

HTH

C’est comme ça que j’ai eu le temps de travailler dans mongoose.js 2.0.4

 var query = EmailModel.find({domain:"gmail.com"}); query.sort('priority', 1); query.exec(function(error, docs){ //... }); 

Enchaînement avec l’interface du générateur de requêtes dans Mongoose 4.

 // Build up a query using chaining syntax. Since no callback is passed this will create an instance of Query. var query = Person. find({ occupation: /host/ }). where('name.last').equals('Ghost'). // find each Person with a last name matching 'Ghost' where('age').gt(17).lt(66). where('likes').in(['vaporizing', 'talking']). limit(10). sort('-occupation'). // sort by occupation in decreasing order select('name occupation'); // selecting the `name` and `occupation` fields // Excute the query at a later time. query.exec(function (err, person) { if (err) return handleError(err); console.log('%s %s is a %s.', person.name.first, person.name.last, person.occupation) // Space Ghost is a talk show host }) 

Consultez les documents pour en savoir plus sur les requêtes.

avec la version actuelle de mongoose (1.6.0) si vous voulez seulement sortinger par une colonne, vous devez supprimer le tableau et passer l’object directement à la fonction sort ():

 Content.find().sort('created', 'descending').execFind( ... ); 

Il m’a fallu du temps pour bien faire les choses 🙁

Voici comment j’ai réussi à sortinger et à remplir:

 Model.find() .sort('date', -1) .populate('authors') .exec(function(err, docs) { // code here }) 

D’autres ont travaillé pour moi, mais cela a fait:

  Tag.find().sort('name', 1).run(onComplete); 
 Post.find().sort({updatedAt: 1}); 
 Post.find().sort({updatedAt:1}).exec(function (err, posts){ ... });