MongoDB与Mongoose中如何为数据对象添加id属性?
解决MongoDB/Mongoose批量插入时报错'document must have an _id before saving'的问题
错误根源
你当前代码的核心问题是误用了模型构造函数:new Persons()一次只能创建单个文档实例,你传了两个对象进去,Mongoose无法正确处理,才会抛出_id相关的错误。
正确的批量插入方法
直接使用Mongoose模型的insertMany()方法,它支持一次性插入多个文档,并且会自动为每个文档生成唯一的_id,完全不需要手动处理。修改后的代码如下:
const personSchema = new mongoose.Schema({ name: String, number: Number, }) const Persons = mongoose.model('Person', personSchema) // 把要插入的对象放在一个数组里 const personsData = [ { name: 'Arto Hellas', number: '040123456' }, { name: 'Jabss', number: '1223132133' } ] // 使用insertMany批量插入 Persons.insertMany(personsData) .then(result => { console.log(`成功保存${result.length}条数据`) mongoose.connection.close() }) .catch(err => { console.error('保存失败:', err) mongoose.connection.close() })
关于你之前尝试的方案的说明
- 手动在Schema中定义
_id:
如果你在Schema里显式声明了_id: mongoose.Schema.Types.ObjectId,Mongoose就不会自动为你生成_id了,必须手动给每个文档分配唯一的ObjectId(比如用new mongoose.Types.ObjectId()),这反而增加了工作量,新手完全没必要这么做,默认配置就足够。 - 逐个创建对象并save:
这种方法本身是可行的,但批量处理时效率低且代码冗余,insertMany()就是为批量场景设计的,更简洁高效。
内容的提问来源于stack exchange,提问作者Jabri Juhinin
相关产品推荐
相关产品推荐

