TypeError:callback.apply不是allowDiskUse之后的函数

时间:2018-06-08 08:18:53

标签: node.js mongodb mongoose mongodb-query aggregation-framework

我有一个拥有1M万个文档的集合......我已经通过了allowDiskUse的选项,现在它正在抛出错误

TypeError: callback.apply is not a function

我已经搜索了这个,但可以得到解决方案......请帮忙

const pictures = await Picture.aggregate([
      { $sort: { createdAt: -1 }},
      { $group: {
        _id: { $dateToString: { format: "%Y-%m-%d", date: "$createdAt" } },
        pictures: {
          $push: {
            _id: '$_id',
            image: '$image',
            time: { $dateToString: { format: "%H:%M:%S", date: "$createdAt" } }
          }
        }
      }},
      { $limit: 50 },
      { $project: {
        _id: false,
        createdAt: '$_id',
        pictures: '$pictures'
      }}
    ], { allowDiskUse: true })

Mongodb版本 - 3.6

Mongoose版本 - 5.0

1 个答案:

答案 0 :(得分:3)

因为这是“猫鼬”。 aggregate()方法in the Mongoose API上没有“选项”块。这是源链接,然后是the documentation。请注意返回的<Aggregate>类型。

链接到allowDiskUse(true),如文档中所示:

await Model.aggregate(..).allowDiskUse(true).exec()

您绝对不需要在大多数聚合中使用该选项。获取警告消息通常表明您实际上缺少索引,或者实际上对$match进行任何合理的尝试并过滤掉结果。