2013-05-03 24 views
16

我想排序來自集合的填充文檔,我得到一個錯誤請求它。如何在查找請求中對已填充的文檔進行排序?

讓我們承認一個文檔Group(集團)和 '會員'(Group.Members)

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

完美的作品,但我想對它進行排序,所以我這樣做:

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

我加入這個得到錯誤TypeError: Invalid select() argument. Must be a string or object. ...

回答

14

這個例子上面貓鼬2.X的作品,與貓鼬3.x中,使用此synwtax:

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

而對於貓鼬4.x中使用的語法如下:

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

參考:Mongoose docs

+3

它不適用於我。 – 2016-09-29 12:41:05

+0

另外,我無法找到貓鼬中排序選項行爲的確切參考。 但確定選項是替代語法中的第5個參數,在路徑,選擇,模型和匹配之後。 – 2016-09-29 12:43:28

+0

@NicoPasserini對不起,如果它不適合你,這是正確的文件,在答案中鏈接的確切例子。所以你可能做錯了。 – Wtower 2016-09-29 13:25:08

0

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

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

附註:

下的貓鼬v5.0.5爲我工作此示例與Kitten示例之間的主要區別在於,commentDateDate用引號引起,而日期(在Kitten示例中)不是。對你們中的一些人來說,這種改變可能是必要的。希望這可以幫助。

相關問題