Mongodb字段更新$set操作符

2021-01-21 13:56:43

参考地址 Mongodb字段更新$set操作符

一、定义

$set操作符替换掉指定字段的值

$set操作符有如下格式:


{ $set: { <field1>: <value1>, ... } }


使用点号指定一个内嵌文档的字段;


二、规则

如果指定字段不存在$set操作符将会添加一个新的字段使用指定的值,前提是新字段不能违反类型规约,如果你使用点号指定一个不存在的内嵌文档字段将会添加一个新的内嵌字段;

如果指定多个字段值对,$set操作符将会新增或者更新每个字段;

三、例子

考虑如下的products集合文档


{  _id: 100,  sku: "abc123",  quantity: 250,  instock: true,  reorder: false,  details: { model: "14Q2", make: "xyz" },  tags: [ "apparel", "clothing" ],  ratings: [ { by: "ijk", rating: 4 } ]
}


设置顶级字段


如下查询_id为100的文档并且使用$set操作符更新如下字段:


db.products.update(
   { _id: 100 },
   { $set:
      {        quantity: 500,        details: { model: "14Q3", make: "xyz" },        tags: [ "coats", "outerwear", "clothing" ]
      }
   }
)


上面的操作替换quantity的值为500,details为一个新的内嵌文档,tags为一个新的数组;



设置内嵌文档中的字段

使用点号指定内嵌文档或者数组中字段:

如下操作查询_id等于100的集合文档,并且更新内嵌文档details中的字段make:


db.products.update(
   { _id: 100 },
   { $set: { "details.make": "zzz" } }
)


设置数组中的元素:

查询调迁_id等于100的文档,如下操作更新两个元素(数组索引是1)在数组tags字段和rating字段的第一个元素(索引是0)

db.products.update(
   { _id: 100 },
   { $set:
      {        "tags.1": "rain gear",        "ratings.0.rating": 2
      }
   }
)


  • 2017-07-26 11:57:00

    Laravel 定时任务

    在 php 中使用定时器是一件不太简单的事情,之前大概只能通过 cron 来实现定时任务。但是在 Laravel5 中,定时任务将会变得很简单。

  • 2017-08-03 21:16:46

    Node.js 里面那些遗失的 ES6 特性

    其实 Node.js 对 ES6 的很多特性都已经开始支持了。 在 Node.js 使用的 JS 引擎 V8 里面将不同状态 ES6 特性分成了 3 个等级:

  • 2017-08-08 11:17:17

    nginx 反向代理 取得真实IP和域名

    nginx反向代理后,在应用中取得的ip都是反向代理服务器的ip,取得的域名也是反向代理配置的url的域名,解决该问题,需要在nginx反向代理配置中添加一些配置信息,目的将客户端的真实ip和域名传递到应用程序中。

  • 2017-08-09 15:14:52

    如何写好.babelrc?Babel的presets和plugins配置解析

    官网是这么说的,翻译一下就是下一代JavaScript 语法的编译器。 作为前端开发,由于浏览器的版本和兼容性问题,很多JavaScript的新的方法都不能使用,等到可以大胆使用的时候,可能已经过去了好几年。Babel就因此而生,它可以让你放心使用大部分的JavaScript的新的标准的方法,然后编译成兼容绝大多数的主流浏览器的代码。