Node.js Mongoose:是否可以在数组类型的字段上使用populate来只返回该数组的X个元素?
我有这个模型:Node.js Mongoose:是否可以在数组类型的字段上使用populate来只返回该数组的X个元素?,node.js,mongodb,mongoose,orm,mern,Node.js,Mongodb,Mongoose,Orm,Mern,我有这个模型: const UserSchema = new Schema({ following: [ { type: Schema.Types.ObjectId, ref: "users", }, ], }); module.exports = User = mongoose.model("users", UserSchema); 我想在后面的字段中使用填充,但是只返回该数组的前5个元素 是否可以直接
const UserSchema = new Schema({
following: [
{
type: Schema.Types.ObjectId,
ref: "users",
},
],
});
module.exports = User = mongoose.model("users", UserSchema);
我想在后面的字段中使用填充,但是只返回该数组的前5个元素
是否可以直接使用“填充”执行此操作
我知道我最近可以在得到所有数组元素后进行数组截断。但是,我所做的是在一个复杂的查询中,我不想让它变得更复杂。
谢谢。
“填充”确实支持“限制”选项,但是,它当前不限制每个文档的向后兼容性。例如,假设您有以下5项:
极限
如果不考虑用户数量,您希望获得总共5个以下
这是因为,为了避免对每个文档执行单独的查询,Mongoose使用numDocuments*limit作为限制来查询粉丝。如果需要正确的限制,应使用perDocumentLimit选项(Mongoose 5.9.0中新增)。请记住,populate()将为每个故事执行单独的查询,这可能会导致populate()速度变慢
perDocumentLimit
如果您希望每个用户总共获得5个追随者
告诉Mongoose执行单独查询的特殊选项
对于每个用户
,以确保我们为每个用户获得5个以下
const users = await User.find().populate({
path: 'following',
options: { perDocumentLimit: 5 }
});
const users = await User.find().populate({
path: 'following',
options: { perDocumentLimit: 5 }
});