在数组中填充有限数量的项目,但保持数组长度 - mongoose

时间:2016-11-15 09:32:34

标签: mongodb mongoose mongoose-populate

使用架构

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 个答案:

答案 0 :(得分: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);
            }
          });
      }
    });

希望有所帮助