MongoDB 4.2 官方文档更新文档语句示例

本文介绍 MongoDB 中文档更新示例,详细内容参考 Query Documents

1. 基本更新示例

使用下面语句创建 inventory 集合并往里面插入数据:

db.inventory.insertMany( [
   { item: "canvas", qty: 100, size: { h: 28, w: 35.5, uom: "cm" }, status: "A" },
   { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "mat", qty: 85, size: { h: 27.9, w: 35.5, uom: "cm" }, status: "A" },
   { item: "mousepad", qty: 25, size: { h: 19, w: 22.85, uom: "cm" }, status: "P" },
   { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "P" },
   { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
   { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
   { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" },
   { item: "sketchbook", qty: 80, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "sketch pad", qty: 95, size: { h: 22.85, w: 30.5, uom: "cm" }, status: "A" }
] );
1.1 更新集合中的文档

MongoDB 提供了更新操作符用于更新文档,例如使用 $set 修改字段的值。
使用如下格式来使用 更新操作符:

{
  <update operator>: { <field1>: <value1>, ... },
  <update operator>: { <field2>: <value2>, ... },
  ...
}

有一些更新操作符,例如 $set,如果操作的字段不存在,它会自动创建此字段。通过查看更新操作符了解更多。

1.2 更新一个文档

示例:使用 db.collection.updateOne() 方法更新 inventory 集合中第一个 item:paper 的文档。

db.inventory.updateOne(
   { item: "paper" },
   {
     $set: { "size.uom": "cm", status: "P" },
     $currentDate: { lastModified: true }
   }
)
  • $set:将 size.uom 设置为 cm,将 status 设置为 P。
  • $currentDate:通过此操作符,将 lastModified 字段的值设置为当前日期。如果文档中不存在 lastModified 字段,会自动创建此字段。
1.3 更新多个文档

示例:使用 db.collection.updateMany() 方法更新 inventory 集合中 所有 qty < 50 的文档

db.inventory.updateMany(
   { "qty": { $lt: 50 } },
   {
     $set: { "size.uom": "in", status: "P" },
     $currentDate: { lastModified: true }
   }
)
1.4 替换文档

db.collection.replaceOne() 方法可以用于替换整个文档(不包括 _id)字段。将替换后的整个新文档作为第二个参数传递给 db.collection.replaceOne() 即可。

用于替换的文档必须由 field:value 键值对组成,不能包含 更新操作符

用于替换的文档和被替换的文档字段可以不一样,由于被替换的文档 _id 字段已经存在切不可改变,所以用于替换的文档可以不包含 _id 字段,如果用于替换的文档包含 _id 字段,必须保证 _id 和当前 _id 完全一致。

示例:

db.inventory.replaceOne(
   { item: "paper" },
   { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 40 } ] }
)
1.5 更新 Behavior
原子性 Atomicity:

在 MongoDB 中,文档级别的的写操作是原子性的,甚至包括单个文档里面的多个内嵌文档。具体可以参考 原子性和事务

_id 字段

一旦创建,_id 字段不能被更新,也不能在替换文档的时候包含一个不同的 _id。

字段顺序

MongoDB 按照文档写入的顺序整理文档字段,以下情况除外:

  • _id 字段始终在文档中的首位
  • $rename 操作符可能会导致文档字段顺序改变
Upsert 选项

当使用 updateOne(), updateMany(), replaceOne() 方法时,如果加上 upsert : true,如果没有匹配到结果,这些方法会创建新的文档并插入;如果匹配到了结果,这些方法则会执行更新操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值