猫鼬insertMany()。exec()返回TypeError

时间:2018-07-21 07:50:30

标签: node.js database mongodb asynchronous mongoose

以下函数由async / await函数调用,因此我需要从Mongoose返回真正的Promise,因此在documentationthis SO thread中使用“ .exec()”。

// where data is an array of documents
function insertNewResults(data) {
    return Model.insertMany(data).exec();
}

这样做会给我以下错误:

  

TypeError:Model.insertMany(...)。exec不是一个函数       在insertNewResults

如果我删除exec(),我将能够没有任何问题地插入许多。我使用exec()进行的其他查询似乎没有引发任何错误,这使其更加困惑。

有人可以解释为什么会这样吗?

编辑1:以下是我的模式代码

const mongoose = require('mongoose');

const schema = new mongoose.Schema({
    date: { type: Date, required: true },
    price: { type: Number, required: true },
    result: { type: String, required: true }
}, { usePushEach: true });

schema.index(
    { date: -1 }
);
mongoose.model('Model', schema);

1 个答案:

答案 0 :(得分:5)

正如在参考资料中所解释的,由于queries are not promises,返回查询的方法可能需要exec()。参考文献还列出了methods that return queries

Model.deleteMany()
Model.deleteOne()
Model.find()
Model.findById()
Model.findByIdAndDelete()
Model.findByIdAndRemove()
Model.findByIdAndUpdate()
Model.findOne()
Model.findOneAndDelete()
Model.findOneAndRemove()
Model.findOneAndUpdate()
Model.replaceOne()
Model.updateMany()
Model.updateOne()

insertMany不是其中之一,it returns a promise right away

应该是:

function insertNewResults(data) {
    return Model.insertMany(data);
}