2013-05-03 15 views
16

Seçtiğim koleksiyondan nüfuslu bir belgeyi sıralamak istiyorum, istekte bulunan bir hata alıyorum.Bulma isteğinde nüfuslu bir belge nasıl sıralanır?

en

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

İşleri mükemmel Belge Group (Grup) ve 'Üye' (Group.Members) itiraf edelim, ama onu sıralamak istiyorum bu yüzden bunu:

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

Bunu ekleyerek TypeError: Invalid select() argument. Must be a string or object. hatasını al ...

cevap

14

Yukarıdaki örnek Mongoose 2.x ile Mongoose 3.x ile çalışmaktadır, bu synwtax kullanın:

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

Ayrıca örtülü populate sadece gerekli parametreleri belirtebilirsiniz:

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

:

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

bu sözdizimi http://mongoosejs.com/docs/api.html#document_Document-populate

+0

tür çalışmıyor –

+0

Bu işe yaramadı – mtro

6

de Ve Gelincik 4.x kullanım için göz Referans: Mongoose docs

+3

Benim için çalışmıyor. –

+0

Ayrıca, sıralama seçeneğinin davranışını tam anlamıyla mongoose'da bulamıyorum. Ama emin seçenekler, alternatif sözdiziminde 5. parametredir, yoldan sonra, seçin, modele ve eşleşmeye. –

+0

@NicoPasserini, sizin için işe yaramazsa özür dileriz, yanıtta bağlantılı resmi belgelerin tam örneğidir. Yani muhtemelen yanlış anlıyorsun. – Wtower

0

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

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

P.S.:

şu Gelincik v5.0.5 benim için çalıştı Bu örnek ile Kitten örneği arasındaki temel fark, commentDate'un tırnak işaretleri içinde olmasıdır, oysa Date (Kitten örneğindedir). Bu değişiklik bazılarınız için gerekli olabilir. Bu yardımcı olur umarım.