Wie sortiere ich Mungo?


Antworten:


157

In Mongoose kann eine Sortierung auf eine der folgenden Arten durchgeführt werden:

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) { ... });

5
Dies ist fast eine direkte Kopie der Antwort von Francisco Presencia. Leider sind die Antworten mit den höchsten Stimmen veraltet und unnötig lang.
iwein

2
Dies ist bis heute nicht ganz richtig. {sort: [['date', 1]]}wird nicht funktionieren, aber .sort([['date', -1]])wird funktionieren. Siehe diese Antwort: stackoverflow.com/a/15081087/404699
Steampowered

@steampowered danke, ich werde eine Bearbeitung vornehmen, Sie können mich gerne informieren oder bearbeiten, wenn ich etwas falsch gemacht habe.
iwein

135

So kam ich dazu, in Mungo 2.3.0 zu arbeiten :)

// 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
})

7
in Mungo 3 können Sie nicht Arraymehr für die StringObject
Feldauswahl verwenden

4
Übrigens, wenn Sie alle Felder wollen, können Sie einfach nullin diesen Abschnitt ziehen (zumindest in 3.8)
MalcolmOcean

62

Ab Mungo 3.8.x:

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

Wo:

criteriasein kann asc, desc, ascending, descending, 1, oder-1


52

AKTUALISIEREN:

Post.find().sort({'updatedAt': -1}).all((posts) => {
  // do something with the array of posts
});

Versuchen:

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

13
Im neuesten Mungo (2.4.10) ist es .sort("updatedAt", -1).
Marcel Jackwerth

43
Im noch aktuelleren Mongoose (3.5.6-pre, aber ich bin mir ziemlich sicher, dass es für alle 3.x gültig ist) ist es .sort({updatedAt: -1})oder .sort('-updatedAt').
Andreas Hultgren

2
Dann sollten Sie exec(function (posts) {…anstelle vonall
Buzut

Ich habe eine all() must be used after where() when called with these argumentsin Mongoose 4.6.5 ...
Dam Fa

24

Mungo v5.4.3

nach aufsteigender Reihenfolge sortieren

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) { ... });

nach absteigender Reihenfolge sortieren

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) { ... });

Für Details: https://mongoosejs.com/docs/api.html#query_Query-sort


23

Aktualisieren

Es gibt ein besseres Schreiben, wenn dies die Leute verwirrt; Besuche Dokumente zu finden , und wie Abfragen arbeiten im Mungo - Handbuch. Wenn Sie die fließende API verwenden möchten, können Sie ein Abfrageobjekt abrufen, indem Sie keinen Rückruf für die find()Methode bereitstellen. Andernfalls können Sie die Parameter wie unten beschrieben angeben.

Original

Bei einem bestimmten modelObjekt kann es gemäß den Dokumenten zu Model folgendermaßen funktionieren 2.4.1:

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

Das search specerwartet ein Objekt, aber Sie können nulloder ein leeres Objekt übergeben.

Der zweite Parameter ist die Feldliste als Array von Zeichenfolgen, also würden Sie ['field','field2']oder angeben null.

Der dritte Parameter sind die Optionen als Objekt, einschließlich der Möglichkeit, die Ergebnismenge zu sortieren. Sie würden verwenden, { sort: { field: direction } }wo fieldist der Feldname der Zeichenfolge test(in Ihrem Fall) und directionist eine Zahl, bei der 1aufsteigend und -1absteigend ist.

Der letzte Parameter ( callback) ist die Rückruffunktion, die die von der Abfrage zurückgegebene Sammlung von Dokumenten empfängt.

Die Model.find()Implementierung (in dieser Version) führt eine verschiebbare Zuweisung von Eigenschaften durch, um optionale Parameter zu verarbeiten (was mich verwirrt hat!):

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


Für die Projektion: Wir müssen eine Zeichenfolge bereitstellen, die durch Leerzeichen getrennte Spaltennamen enthält.
Papa

11

So kam ich dazu, in mongoose.js 2.0.4 zu arbeiten

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

10

Verkettung mit der Query Builder-Oberfläche in 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
})

Weitere Informationen zu Abfragen finden Sie in den Dokumenten .


4

Wenn Sie mit der aktuellen Version von mongoose (1.6.0) nur nach einer Spalte sortieren möchten , müssen Sie das Array löschen und das Objekt direkt an die Funktion sort () übergeben:

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

Ich habe einige Zeit gebraucht, um das richtig zu machen :(


Vielen Dank. Ihr Beitrag hat mir geholfen. Auch ich habe mich dem gestellt.
user644745

4
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)
    })
})

Ausgabe

[ { _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 } ]

3

So konnte ich sortieren und füllen:

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


2

Andere arbeiteten für mich, aber das tat:

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

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


0

Ab 4.x wurden die Sortiermethoden geändert. Wenn Sie> 4.x verwenden. Versuchen Sie es mit einer der folgenden Methoden.

Post.find({}).sort('-date').exec(function(err, docs) { ... });
Post.find({}).sort({date: -1}).exec(function(err, docs) { ... });
Post.find({}).sort({date: 'desc'}).exec(function(err, docs) { ... });
Post.find({}).sort({date: 'descending'}).exec(function(err, docs) { ... });
Post.find({}).sort([['date', -1]]).exec(function(err, docs) { ... });
Post.find({}, null, {sort: '-date'}, function(err, docs) { ... });
Post.find({}, null, {sort: {date: -1}}, function(err, docs) { ... });
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.