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