2013-05-03 5 views
16

Ich möchte ein gefülltes Dokument aus der Sammlung, die ich erhalte, sortieren, ich erhalte einen Fehler beim Anfordern.Wie wird ein gefülltes Dokument in der Suchanforderung sortiert?

Lassen Sie uns ein Dokument zugeben Group (Group) und 'Mitglied' (Group.Members)

Group 
    .find({}) 
    .populate('Members') 

funktioniert perfekt, aber ich möchte es so sortieren, ich tue dies:

Group 
    .find({}) 
    .populate('Members', ['_id', 'name'], null, { sort: [[ 'created_at', 'desc' ]] }) 

Ich bekomme den Fehler TypeError: Invalid select() argument. Must be a string or object. durch Hinzufügen dieser ...

Antwort

14

Dieses Beispiel oben funktioniert mit Mongoose 2.x, mit Mongoose 3.x, verwenden Sie dieses Synwtax:

Group 
    .find({}) 
    .populate('Members', '_id name', null, { sort: { 'created_at': -1 } }) 
39

Sie können implizit auch nur erforderlichen Parameter von bevöl angeben:

Group 
    .find({}) 
    .populate({path: 'Members', options: { sort: { 'created_at': -1 } } }) 

Werfen Sie einen Blick auf http://mongoosejs.com/docs/api.html#document_Document-populate

+0

Sortierung funktioniert nicht –

+0

Dies hat nicht funktioniert – mtro

6

Und für Mongoose 4.x Verwendung dieser Syntax:

Kitten.find().populate({ 
    path: 'owner' 
    , select: 'name' 
    , match: { color: 'black' } 
    , options: { sort: { name: -1 }} 
}).exec(function (err, kittens) { 
    console.log(kittens[0].owner.name) // Zoopa 
}) 

// alternatively 
Kitten.find().populate('owner', 'name', null, {sort: { name: -1 }}).exec(function (err, kittens) { 
    console.log(kittens[0].owner.name) // Zoopa 
}) 

Referenz: Mongoose docs

+3

Es funktioniert nicht für mich. –

+0

Auch kann ich nicht genaue Referenz des Verhaltens der Sortieroption in Mungo finden. Aber sicher Optionen ist der 5. Parameter in der alternativen Syntax, nach Pfad, wählen, modellieren und übereinstimmen. –

+0

@NicoPasserini Es tut uns leid, wenn es für Sie nicht funktioniert, ist es das genaue Beispiel aus der offiziellen Dokumentation, die in der Antwort verknüpft ist. Also machst du wahrscheinlich etwas falsches. – Wtower

0

Die folgende arbeitete für mich in Mongoose v5.0.5:

Schedule.find({}) 
 
     .populate({path: 'eventComments', options: {sort:{"commentDate": "descending"}}}) 
 
     .exec(function(err, result) { 
 
      if (err) { 
 
       throw err 
 
      } 
 

 
      else { 
 
       return res.json(result); 
 
      } 
 
    });

P. S. Der Hauptunterschied zwischen diesem Beispiel und dem Kitten-Beispiel besteht darin, dass commentDate in Anführungszeichen steht, während Datum (im Kitten-Beispiel) nicht ist. Diese Änderung kann für einige von Ihnen notwendig sein. Hoffe das hilft.

Verwandte Themen