获取字段的所有数据,但只在mongodb中填充其中的10个

时间:2018-03-26 22:05:36

标签: mongodb mongoose

我有User架构的friends模型:

friends: [{
      type : Schema.Types.ObjectId,
      ref: 'User'
    }],

我试过了:

const user = await User.findById({ _id: userID })
        .populate({ path: 'friends', options: { limit: 10 } })

这可行....但实际上它只加载了populate只有10个朋友。我需要加载所有这些以显示朋友的数量并填充10以显示用户头像等等......

我该怎么做?

此模式还有simimar问题:

comments: [{
      user: {
        type : Schema.Types.ObjectId,
        ref: 'User'
      },
      comment: {
        type: String
      },
      date: {
        type: Date,
        default: Date.now
      }
    }]

我试过了:

它填充了所有comments.user,但我应该怎么做呢,因为:

const user = await User.findById({ _id: userID })
        .populate({ path: 'comments.user', options: { limit: 10 } })

并不限制他们......

1 个答案:

答案 0 :(得分:0)

您可以通过使用聚合+填充类似这样的(未经测试)来解决这个问题:

var result = User.aggregate([{
    $match: { // filter by user id
        _id: userID
    }
}, {
    $addFields: { // add count of friends
        numberOfFriends: { $size: "$friends" }
    }
}]);

然后

User.populate(result, { path: "friends", options: { limit: 10 } }, /* your callback */);