it-swarm.com.de

Wie sortiere ich ein gefülltes Dokument in einer Suchabfrage?

Ich möchte ein ausgefülltes Dokument aus der Sammlung sortieren, die ich abrufe. Bei der Anforderung wird ein Fehler angezeigt.

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

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

Funktioniert einwandfrei, aber ich würde es gerne sortieren, also mache ich das:

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

Ich erhalte den Fehler TypeError: Invalid select() argument. Must be a string or object., indem ich Folgendes hinzufüge ...

19
Ludo

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

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

Sie können auch nur die erforderlichen Parameter von populate implizit angeben:

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

Schauen Sie sich an http://mongoosejs.com/docs/api.html#document_Document-populate

47
Artem Fedosov

Und für Mongoose 4.x verwenden Sie diese 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

11
Wtower

In Mongoose Version 5 und höher funktionierte das für mich richtig.

Clinics.findById(req.params.id).populate({path:'users',options:{ sort:{date : 1}}}).exec(callback);
2
yogesh joshi

In Mongoose v5.0.5 funktionierte Folgendes:

    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 Date (im Kitten-Beispiel) nicht der Fall ist. Diese Änderung kann für einige von Ihnen notwendig sein. Hoffe das hilft. 

0
NBB