以下函数由async / await函数调用,因此我需要从Mongoose返回真正的Promise,因此在documentation和this 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);
答案 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);
}