uni-app 云函数中操作云数据库 批量新增文档报错

uni-app 云函数中操作云数据库 批量新增文档报错

开发环境 版本号 项目创建方式
Mac 10.15 HBuilderX

操作步骤:

批量添加的数据中不添加_id字段

预期结果:

正常执行

实际结果:

报错:

Bulk write operation error on server 192.168.146.77:3717. Write errors: [BulkWriteError{index=0, code=11000, message='E11000 duplicate key error collection: db_VKCEYUGU_c9622c9b-709f-45c5-bae2-0e6a2ea9c534.xxx index: _id_ dup key: { _id: ObjectId('6094f034935e5b0001cdbf28') }', details={ }}].

bug描述:

在云函数中操作云数据库 批量新增文档,返回错误:

Bulk write operation error on server 192.168.146.77:3717. Write errors: [BulkWriteError{index=0, code=11000, message='E11000 duplicate key error collection: db_VKCEYUGU_c9622c9b-709f-45c5-bae2-0e6a2ea9c534.xxx index: _id_ dup key: { _id: ObjectId('6094f034935e5b0001cdbf28') }', details={ }}].

如果在文档数据中自己生成 _id 字段的值可以正常添加。


更多关于uni-app 云函数中操作云数据库 批量新增文档报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 云函数中操作云数据库 批量新增文档报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个错误是由于MongoDB自动生成的_id字段冲突导致的。当批量插入文档时,如果不显式指定_id字段,MongoDB会自动为每个文档生成一个唯一的ObjectId作为_id。但在uni-app云函数的批量操作中,可能会出现自动生成的_id重复的情况。

错误信息显示:duplicate key errordup key表明_id字段值ObjectId('6094f034935e5b0001cdbf28')已经存在,违反了唯一性约束。

解决方案:

  1. 在批量插入的数据中显式指定唯一的_id值,如你提到的自己生成_id字段可以正常添加
  2. 使用不同的批量插入策略,比如分批次插入
  3. 确保每次批量插入都使用全新的数据对象,避免对象引用导致的_id重复

推荐采用第一种方案,在插入数据前为每个文档生成唯一的_id:

const db = uniCloud.database()
const data = yourDataArray.map(item => {
  return {
    _id: db.generateId(),
    ...item
  }
})
await db.collection('your-collection').add(data)
回到顶部