MongoDB中Mongoose的insertMany无法保存文档问题求助
解决Mongoose insertMany后无法保存的问题
嘿,我来帮你理清楚这个问题~
首先你得明白:Model.insertMany()方法本身就已经完成了批量插入并保存文档到MongoDB的操作,你不需要再额外调用save()了。你遇到的hostModel.save is not a function报错,是因为save()是文档实例的方法,不是Model的静态方法——只有用new hostModel()创建的单个文档对象才能调用save(),直接在Model上调用肯定会报错。
修正你的代码
只需要删掉多余的hostModel.save()调用就行,你的路由代码可以改成这样:
var mongoose = require('mongoose'); var hostModel = require('../../models/Host'); router.post('/host', function (req, res, next) { var payload = req.body; (async function(){ try { // insertMany直接完成批量插入保存 const insertMany = await hostModel.insertMany(payload.data); console.log(JSON.stringify(insertMany,'',' ')); res.status(200).send('Ok'); } catch (err) { // 别忘了处理可能的错误,比如数据验证失败、数据库连接问题等 console.error(err); res.status(500).send('插入失败:' + err.message); } })(); });
额外提示
- 一定要加上
try/catch来捕获异步操作中的错误,不然如果插入过程中出现问题(比如字段验证不通过、数据库断开连接),你的程序会崩溃,而且无法给前端返回错误响应。 - 如果你需要手动创建文档实例再保存,那才会用到
save(),比如单个文档的情况:
const newHost = new hostModel({ hostname: 'test', timestamp: Date.now() }); await newHost.save(); // 这时候是对的,因为newHost是文档实例
内容的提问来源于stack exchange,提问作者Marrone
相关产品推荐
相关产品推荐

