MongoDB:使用精益集合功能

bor*_*ork 4 mongoose mongodb

我正在尝试使用该lean()选项以加快查询速度.但是当它添加到这样的查询时:

Pets.aggregate({ $match: { 'Name': 'Floofkins', 'lastMealDate': {$gt: today}}}, function (err, pets){
  if (err) {
    res.status(500).json({'error': err});
    console.log('Could not fetch pets: ' + err);
    return;
  }
    petsHadMealsToday = pets.length;
}).lean();
Run Code Online (Sandbox Code Playgroud)

我得到的是TypeError: Cannot read property 'lean' of undefined虽然pets.length收益宠物匹配查询的数量.

如果我删除该match选项并运行如下所示的内容,它就像一个魅力.

Pets.aggregate({ 'Name': 'Floofkins', 'lastMealDate': {$gt: today}}, function (err, pets){
      if (err) {
        res.status(500).json({'error': err});
        console.log('Could not fetch pets: ' + err);
        return;
      }
        petsHadMealsToday = pets.length;
    }).lean();
Run Code Online (Sandbox Code Playgroud)

我想我错过了一些关于如何使用的基本观点match,所以请随时教育我!

Shu*_*ham 10

无需精益管道输出.聚合输出已经很精简了,也使用了mongoose http://mongoosejs.com/docs/api.html#model_Model.aggregate

因为聚合管道的输出不是mongoose文件


bor*_*ork 10

看了一下,这是我对我的问题的回答:

lean()aggregate函数不需要,因为返回的文档是纯JavaScript对象,而不是Mongoose对象.这是因为可以返回任何形状的文档.来源.

因此,添加lean()到aggregate函数将生成错误,因为没有任何内容可以执行该lean()函数.