web-dev-qa-db-fra.com

Comment trier dans la mangouste?

Je ne trouve pas de doc pour le modificateur de tri. Le seul aperçu est dans les tests unitaires: spec.lib.query.js # L12

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

Mais ça ne marche pas pour moi:

Post.find().sort(['updatedAt', 1]);
112
Philippe Rathé

C'est comme ça que j'ai réussi à travailler en mangouste 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
})
118

En Mongoose, un tri 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) { ... });
110
iwein

Essayer:

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

À partir de Mongoose 3.8.x:

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

Où:

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

50
user3784764

Mettre à jour

Il est préférable de rédiger si cela déroute les gens; vérifier trouver des documents et comment les requêtes fonctionnent dans le manuel de mangouste. Si vous souhaitez utiliser l'API fluide, vous pouvez obtenir un objet de requête en ne rappelant pas la méthode find(). Sinon, vous pouvez spécifier les paramètres comme indiqué ci-dessous.

Original

Étant donné un objet model, conformément à la docs sur Model , voici comment cela peut fonctionner pour 2.4.1:

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

Le search spec attend un objet, mais vous pouvez passer null ou un objet vide.

Le deuxième 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'objet, ce qui inclut la possibilité de trier le jeu de résultats. Vous utiliseriez { sort: { field: direction } }field est la chaîne nom_champ test (dans votre cas) et direction est un nombre où 1 est croissant et -1 désactivé.

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

L'implémentation Model.find() (dans cette version) effectue une allocation glissante de propriétés pour gérer les paramètres facultatifs (ce qui m'a confondu!):

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

23
AJ.

C’est ainsi que j’ai réussi à trier dans mongoose.js 2.0.4

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

Chaînage 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
})

Voir le docs pour plus d’informations sur les requêtes.

7
user4322543

avec la version actuelle de mongoose (1.6.0) si vous voulez seulement trier par one column, vous devez supprimer le tableau et passer l'objet directement à la fonction sort ()

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

m'a pris du temps, pour bien comprendre :(

4
pkyeck

Voici comment j'ai réussi à trier et à peupler:

Model.find()
.sort('date', -1)
.populate('authors')
.exec(function(err, docs) {
    // code here
})
3
Post.find().sort({updatedAt: 1});
2
chovy

D'autres travaillaient pour moi, mais c'était le cas:

  Tag.find().sort('name', 1).run(onComplete);
2
FrederickCook

Mongoose v5.4.3

trier par ordre croissant

Post.find({}).sort('field').exec(function(err, docs) { ... });
Post.find({}).sort({ field: 'asc' }).exec(function(err, docs) { ... });
Post.find({}).sort({ field: 'ascending' }).exec(function(err, docs) { ... });
Post.find({}).sort({ field: 1 }).exec(function(err, docs) { ... });

Post.find({}, null, {sort: { field : 'asc' }}), function(err, docs) { ... });
Post.find({}, null, {sort: { field : 'ascending' }}), function(err, docs) { ... });
Post.find({}, null, {sort: { field : 1 }}), function(err, docs) { ... });

trier par ordre décroissant

Post.find({}).sort('-field').exec(function(err, docs) { ... });
Post.find({}).sort({ field: 'desc' }).exec(function(err, docs) { ... });
Post.find({}).sort({ field: 'descending' }).exec(function(err, docs) { ... });
Post.find({}).sort({ field: -1 }).exec(function(err, docs) { ... });


Post.find({}, null, {sort: { field : 'desc' }}), function(err, docs) { ... });
Post.find({}, null, {sort: { field : 'descending' }}), function(err, docs) { ... });
Post.find({}, null, {sort: { field : -1 }}), function(err, docs) { ... });

Pour plus de détails: https://mongoosejs.com/docs/api.html#query_Query-sort

2
sultan aslam
Post.find().sort({updatedAt:1}).exec(function (err, posts){
...
});
1
gtsouk

C'est ce que j'ai fait, ça marche bien.

User.find({name:'Thava'}, null, {sort: { name : 1 }})
0
app.get('/getting',function(req,res){
    Blog.find({}).limit(4).skip(2).sort({age:-1}).then((resu)=>{
        res.send(resu);
        console.log(resu)
        // console.log(result)
    })
})

===================================
SORTIE------------------------------------------------- ----------------------------------- 

[ { _id: 5c2eec3b8d6e5c20ed2f040e, name: 'e', age: 5, __v: 0 },
  { _id: 5c2eec0c8d6e5c20ed2f040d, name: 'd', age: 4, __v: 0 },
  { _id: 5c2eec048d6e5c20ed2f040c, name: 'c', age: 3, __v: 0 },
  { _id: 5c2eebf48d6e5c20ed2f040b, name: 'b', age: 2, __v: 0 } ]
0
koteswararao pv