尝试与集合关系聚合时出现MongoError

时间:2016-03-02 21:58:54

标签: mongodb mongoose mean-stack mean meanjs

我是mongodb的新手,使用meanjs.org中的Mean stack。

我有一个具有用户集合关系的模型:

var MealSchema = new Schema({
  mealDate: {
    type: Date,
    default: Date.now
  },
  user: {
    type: Schema.ObjectId,
    ref: 'User'
  }
});
mongoose.model('Meal', MealSchema);

我找到了一个有效的实现:

var user = req.user;
Meal.find({
  mealDate: {
    $gte: minus8days.toDate(),
    $lt: tomorrow.toDate()
  },
  user : user
  }).exec(function (err, meals) {
  if (err) {
    return res.status(400).send({
      message: errorHandler.getErrorMessage(err)
    });
  } else {
    res.json(meals);
  }
});

但我需要一些分组和聚合,所以我试图更改此代码以使用聚合而不是查找,我尝试了很多组合并且我一直收到错误,基本上以下实现会抛出错误MongoError:最大调用堆栈大小超过

Meal.aggregate([
{
  $match: {
    $and: [
      {
        mealDate: {
          $gte: minus8days.toDate(),
          $lt: tomorrow.toDate()
        }
      }, { user: user }
    ]
  }
}]...

为什么用户:用户使用find而不使用聚合? 如何修复聚合方法?

1 个答案:

答案 0 :(得分:1)

试试这个:

Meal.aggregate([
    { 
       $match: { 
           mealDate: { $gte: minus8days.toDate(), $lt: tomorrow.toDate()},
           user: user._id
       }
    }
], function(err, docs){
    if(err) console.log("Error : " + JSON.stringify(err));
    if(docs) console.log("Got the docs successfully : " + JSON.stringify(docs));
});