Skip to content

Latest commit

 

History

History
55 lines (46 loc) · 1.79 KB

Mongoose 插入文档.md

File metadata and controls

55 lines (46 loc) · 1.79 KB

Mongoose 插入文档

在 MongoDB 中,upsert 是指在没有文档匹配 filter 的情况下插入新文档的更新。要在 Mongoose 中插入文档,应将 upsert 选项设置为 Model.updateOne() 方法:

const res = await Character.updateOne(
  { name: 'O.O' },
  { $set: { age: 18 } },
  { upsert: true } // 将此更新设置为 upsert
)

// 如果 MongoDB 修改了现有文档,则为 1;如果 MongoDB 插入了新文档,则为 0。
console.log(res.nModified)
// 包含插入文档的描述数组,包括所有插入文档的 _id。
console.log(res.upserted)

要获取更新插入的文档,应该使用 Model.findOneAndUpdate() 方法,而不是 Model.updateOne()

const doc = await Character.findOneAndUpdate(
  { name: 'O.O' },
  { $set: { age: 18 } },
  { upsert: true, new: true }
)

console.log(doc.name) // O.O
console.log(doc.age) // 18

Mongoose 将最多插入一个文档。即使将 Model.updateMany()upsert 一起使用,Mongoose 最多也会插入一个文档。要批量插入多个文档,应使用 Model.bulkWrite() 方法。

const res = await Character.bulkWrite([
  {
    updateOne: {
      filter: { name: 'D.O' },
      update: { age: 20 },
      upsert: true
    }
  },
  {
    updateOne: {
      filter: { name: 'KAI' },
      update: { age: 20 },
      upsert: true
    }
  }
])

// 包含由于 upsert 而插入的文档数
console.log(res.upsertedCount)
// 包含已更新的现有文档数。
console.log(res.modifiedCount)