微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Mongoose:是否可以在数组类型的字段上使用填充以仅返回该数组的 X 个元素?

如何解决Mongoose:是否可以在数组类型的字段上使用填充以仅返回该数组的 X 个元素?

我有这个模型:

const UserSchema = new Schema({
  following: [
    {
      type: Schema.Types.ObjectId,ref: "users",},],});

module.exports = User = mongoose.model("users",UserSchema);

我想在 populate 字段上使用 following只返回该数组的前 5 个元素。

是否可以直接使用 populate 执行此操作?

我知道我最近可以在获取所有数组元素后执行此数组截断。但是,我正在做的是一个复杂的查询,我不想让它进一步复杂化。
谢谢。

解决方法

https://mongoosejs.com/docs/populate.html#limit-vs-perDocumentLimit

Populate 确实支持限制选项,但是,为了向后兼容,它目前不限制在每个文档的基础上。例如,假设您有以下 5 个:

限制

如果您想获得总数为 5 following,而不考虑用户数量

const users = await User.find().populate({
  path: 'following',options: { limit: 5 }
});

那是因为,为了避免对每个文档执行单独的查询,Mongoose 改为使用 numDocuments * limit 作为限制来查询粉丝。如果您需要正确的限制,您应该使用 perDocumentLimit 选项(Mongoose 5.9.0 中的新功能)。请记住,populate() 将为每个故事执行单独的查询,这可能会导致 populate() 变慢。

perDocumentLimit

如果您希望每个用户总共获得 5 个关注

告诉 Mongoose 执行单独查询的特殊选项 每个 User 以确保我们为每个用户获得 5 following

const users = await User.find().populate({
  path: 'following',options: { perDocumentLimit: 5 }
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。