Mongoose报错:保存前文档必须有_id,多次尝试仍无效求助
问题原因
你代码里的核心错误是:调用new People()时传入了三个独立的对象参数,但Mongoose模型的构造函数仅支持单次创建一个文档实例。这种错误的实例结构会导致Mongoose无法正确生成或识别_id,进而触发保存报错。
解决方案
你需要改用支持批量创建的方法,或者逐个创建文档实例,以下是两种可行的修正方式:
方法1:使用insertMany批量创建(推荐)
直接传入文档数组一次性插入,代码更简洁高效:
const mongoose = require('mongoose'); // 连接数据库并处理连接状态 mongoose.connect("mongodb://localhost:27017/newDB", {useNewUrlParser: true}) .then(() => console.log('数据库连接成功')) .catch(err => console.error('数据库连接失败:', err)); const peopleSchema = new mongoose.Schema({ name: String, age: Number, address: String }); const People = mongoose.model("People", peopleSchema); // 批量插入文档数组 People.insertMany([ { name: "john", age: 25, address: "New York, USA" }, { name: "Don", age: 30, address: "Chicago, USA" }, { name: "Kahn", age: 34, address: "Dhaka, Bangladesh" } ]) .then(() => console.log('数据保存成功')) .catch(err => console.error('保存失败:', err));
方法2:逐个创建并保存文档
如果需要单独处理每个文档的逻辑,可以分别实例化后保存:
const mongoose = require('mongoose'); mongoose.connect("mongodb://localhost:27017/newDB", {useNewUrlParser: true}) .then(() => console.log('数据库连接成功')) .catch(err => console.error('数据库连接失败:', err)); const peopleSchema = new mongoose.Schema({ name: String, age: Number, address: String }); const People = mongoose.model("People", peopleSchema); // 逐个创建并保存 const person1 = new People({ name: "john", age: 25, address: "New York, USA" }); const person2 = new People({ name: "Don", age: 30, address: "Chicago, USA" }); const person3 = new People({ name: "Kahn", age: 34, address: "Dhaka, Bangladesh" }); Promise.all([person1.save(), person2.save(), person3.save()]) .then(() => console.log('所有数据保存成功')) .catch(err => console.error('保存失败:', err));
额外提示
- 务必给数据库连接和数据操作加上错误捕获,方便排查问题
- Mongoose默认会自动为文档生成
_id,不需要手动设置,只要实例创建正确就会自动生成
内容的提问来源于stack exchange,提问作者Md Fajle Rabby
相关产品推荐
相关产品推荐

