2016-11-15 53 views
0

隨着架構填充在數組中元素的數量有限,但保持數組的長度 - 貓鼬

var CommentSchema = new Schema({ 
    text: { type: String }, 
    replies: [{ type: mongoose.Schema.ObjectId, ref: 'Comment' }] 
}); 

我有一個像

Comment.findById(req.params.id) 
    .populate({ 
    path: 'replies', 
    model: 'Comment', 
    options: { 
     limit: 2 
    } 
    }) 
    .exec(...) 

查詢現在,我看不出有任何選項填充數量有限數組中的元素和保持數組長度

我想過填充到不同的「目標」字段,以便原始答覆數組保持不變(因此還有關於答覆數量的信息)。但是我認爲這個選項在mongoose populate()中不存在。

用例可以在上看到Youtube的評論。評論包括回覆的數量,但僅顯示有限的回覆數量。

回答

1

我用下面的技巧來處理這種情況。

var idToSearch = mongoose.Types.ObjectId(req.params.id) 

var aggregation = [ 
    {$match : {_id : idToSearch}}, 
    {$project : { 
     _id : 1, 
     replies: {$slice : ['$replies',5]}, 
     totalreplies : {$size : "$replies"}, 
    }} 
    ]; 
models.Comment.aggregate(aggregation) 
    .exec(function(err, comments) { 
     if(err){ 
     // return error 
     } 
     else if(!comments){ 
     // return data not found 
     }else { 
     models.Comment.populate(comments, 
      { path: 'replies'}, 
      function(err, populatedComments){ 
      if(err){ 
       // return error 
      } 
      else { 
       console.log('comments ',populatedComments); 
      } 
      }); 
     } 
    }); 

希望它可以幫助

+0

謝謝你的快速響應。我可以看到你的解決方案如何工作,但我沒有得到聚合工作。我發佈了一個不同的SO問題:http://stackoverflow.com/questions/40636434/aggregate-returns-empty-array-mongoose – Stefan