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

Populate limited number of items in array, but keep array length - mongoose

有了架构

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(...)

现在我看不到 在数组中填充有限数量 元素并保持数组长度 的选项。

我考虑填充到不同的 "target" 字段,以便原始回复数组保持不变(因此有关回复数量的信息)。但是我认为这个选项在mongoose populate()中不存在。

用例 可以在 Youtube 评论 上看到。评论包括回复数,但只显示有限的回复数。

我使用了以下技巧来处理这种情况。

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

希望对您有所帮助