Mongodb Mongoose填充选项限制,如何限制子文档的数量?

Mongodb Mongoose填充选项限制,如何限制子文档的数量?,mongodb,mongoose,Mongodb,Mongoose,我有一个查询来查找帐户并填充该帐户的子文档 当我使用填充路径:“订单”时,限制选项将起作用。但是如果我使用填充路径“orders.order”,选项限制将不起作用 我该怎么办 我的模式如下: var AccountSchema = new mongoose.Schema({ _id:id, orders:{type:[{ order:{type: mongoose.Schema.Types.ObjectId, ref:'Order'} }]} });

我有一个查询来查找帐户并填充该帐户的子文档

当我使用填充路径:“订单”时,限制选项将起作用。但是如果我使用填充路径“orders.order”,选项限制将不起作用

我该怎么办

我的模式如下:

  var AccountSchema = new mongoose.Schema({

    _id:id,
    orders:{type:[{
      order:{type: mongoose.Schema.Types.ObjectId, ref:'Order'}
    }]}
  });


var findOrderByUserId = function(accountId,index,count,callback){
  var limit = index*count;
  console.log(limit);
  Account.findOne({_id:accountId}).populate({
    path:'orders.order',//If path is orders, then limit will work

    options:{
      limit:limit
    }
  }).exec(function (err, doc) {
              if (err) {
                console.log(err);
                callback(err);
              }
              console.log(doc);
                var array = [];
                for(var i=limit - count;i<doc.orders.length;i++){
                    if(doc.orders[i]!=null){
                        array.push(doc.orders[i]);            
                    }
                    else{
                      break;
                    }
                }
              callback(doc);
          })
}
var AccountSchema=newmongoose.Schema({
_id:id,
订单:{类型:[{
顺序:{type:mongoose.Schema.Types.ObjectId,ref:'order'}
}]}
});
var findOrderByUserId=函数(accountId、索引、计数、回调){
var限制=指数*计数;
控制台日志(限制);
Account.findOne({u id:accountId})。填充({
路径:'orders.order',//如果路径是orders,则限制将起作用
选项:{
极限:极限
}
}).exec(函数(错误、文档){
如果(错误){
控制台日志(err);
回调(err);
}
控制台日志(doc);
var数组=[];

for(var i=limit-count;i
limit
仅适用于顶级文档,要控制文档中的数组,您需要使用
$slice
,这意味着您需要重新生成查询,如下所示(mongo shell):

有关更多信息和示例,请参见:

query.slice('comments', 5)
// or...
query.where('comments').slice(5)

我注意到,在使用猫鼬种群时,slice有一个棘手的问题

例如,我们有两个模型,分别称为UserGroupModel和UserModel

var UserGroupSchema = new mongoose.Schema({
    users:[{type:mongoose.Schema.Types.ObjectId,ref:'User'}],
    groupName:String
})

var UserSchema = new mongoose.Schema({
    username:String
})
现在我们想在UserGroup中填充用户,出于性能考虑,我们只需要所有用户中的最后一个,比如说20个

在这里,像这样的代码是行不通的

UserGroupModel.findById(userGroupId)
    .populate('users', 'username')
    .slice('users', -20)
    .select('users')
    .lean()
    .exec(function(err, group){})
您会注意到slice函数不起作用

你必须换成

UserGroupModel.findById(userGroupId)
    .populate('users', 'username')
    .slice('users', -20)
    .select('-groupName')
    .lean()
    .exec(function(err, group){})
要点是如果要对总体进行切片,必须使用排除


PS.“mongoose”:“4.4.15”

我对mongoose不太熟悉,但为了限制子文档的数量,我们使用了
$slice
操作符。也可以看到这个问题谢谢,我想你可以回答这个问题,而不是发表评论:)我太懒了,回答不对:)您的帖子可以使用一些格式,否则答案会很好:)
UserGroupModel.findById(userGroupId)
    .populate('users', 'username')
    .slice('users', -20)
    .select('-groupName')
    .lean()
    .exec(function(err, group){})