如何解决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 举报,一经查实,本站将立刻删除。