前端大杂烩

Mongoose 插入文档

2022-06-13  本文已影响0人  lio_zero

本文已整理到 Github,地址 👉 blog

如果我的内容帮助到了您,欢迎点个 Star 🎉🎉🎉 鼓励鼓励 :) ~~

我希望我的内容可以帮助你。现在我专注于前端领域,但我也将分享我在有限的时间内看到和感受到的东西。


在 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)
上一篇 下一篇

猜你喜欢

热点阅读