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
      }
   }
)


  • 2018-02-04 23:46:16

    Android SQLite 升级数据库,在原有数据库的基础上添加一列

    原本以为很简单的问题,直接在原来创建数据库的语句中加上需要添加的列new_column,但是运行时发现,应用crash。原因是,原有数据库文件已经存在的情况下并不会重新创建数据库,也就是说此时数据库中并没有new_column列,这个时候,运行query()来查询数据库如果包括new_column列,就会导致应用crash。

  • 2018-02-06 22:23:01

    HTML5 Canvas 的事件处理

    DOM是Web前端领域非常重要的组成部分,不仅在处理HTML元素时会用到DOM,图形编程也同样会用到。比如SVG绘图,各种图形都是以DOM节点的形式插入到页面中,这就意味着可以使用DOM方法对图形进行操作。比如有一个<path id=”p1″>元素,可以直接用jquery增加click事件$(‘#p1’).click(function(){…})”。然而这种DOM处理方法在HTML5的Canvas里不再适用,Canvas使用的是另外一套机制,无论在Canvas上绘制多少图形,Canvas都是一个整体,图形本身实际都是Canvas的一部分,不可单独获取,所以也就无法直接给某个图形增加JavaScript事件。

  • 2018-02-09 01:32:48

    PHP时间戳和日期相互转换

    在php中我们要把时间戳转换日期可以直接使用date函数来实现,如果要把日期转换成时间戳可以使用strtotime()函数实现,下面我来给大家举例说明。

  • 2018-02-09 02:57:46

    如何防止多次打开Activity?

    android:launchMode="singleTask" 加上这句,每次打开如果已有此activity,就会打开原来的实例,否则会创建新的activity​

  • 2018-02-17 18:51:26

    Context都没弄明白,还怎么做Android开发?

    作为Android开发者,不知道你有没有思考过这个问题,Activity可以new吗?Android的应用程序开发采用JAVA语言,Activity本质上也是一个对象,那上面的写法有什么问题呢?估计很多人说不清道不明。