db.collection.update( criteria, objNew, upsert, multi )

criteria : update的查询条件,类似sql update查询内where后面的

objNew : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的

upsert : 这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

multi : mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新

1.$inc-----加法

匹配查询到的第一条记录,给指定数据的指定字段执行加法,如果字段不存在 则会自动添加该字段。

db.collection.update({name:"test"},{$inc:{source:80}})

2.$mul-----乘法

匹配查询到的第一条记录,取值做乘法; 如果字段不存在 则创建该字段并赋0值

数据:{ _id: 1, item: "ABC", price: 10.99 }

执行:db.collection.update({_id:1},{$mul:{price:1.25}}) //price字段值*1.25

结果:{ _id: 1, item: "ABC", price: 13.7375 }

3.$rename---列重命名

db.collection.update({_id:1},{$rename:{nmae:name}},false,true) //将列名nmae 修改为 name

db.collection.update({_id:1},{$rename:{"name.first":"name.fname"}}) 	//将内嵌文档列名 name.first 修改成 name.fname;

注意:"_id"字段的列名不能改

4.$unset----删除列

db.collection.update({_id:1},{$unset:{name:""}}) //删除id=1的数据的name字段

5.$min

使用指定的值和find()到的数据的指定列比较,如果指定的值小于数据库里面的值,则执行更新

如果指定的字段不存在,则添加字段并设值

例子数据中:value.fssum=3,value.xzsum=3;
db.test_person_count_day.update({"_id.name":"551"},{$min:{"value.fssum":4}}) //执行更新 db.test_person_count_day.update({"_id.name":"551"},{$min:{"value.xzsum":2}}) //什么也不做

6.$max 与$min相反

用指定值与数据库里的值做对比,如果指定的值大于数据库里面的值,则执行更新

7.$setOnInsert

只有在upsert 设置为true; 并且被更新的文档不存在的时候,需要插入一个新的文档的时候才起作用.

在插入的时候会为新插入的文档添加新给定的字段.

db.user.update({name:"user2"},{"$setOnInsert":{age:12}},{"upsert":true}); //集合中没有name:user2的数据,插入成功
//{_id:"ObjectId(xxxx.....)",name:"user2",age:12}
db.user.update({name:"user2"},{"$setOnInsert":{"sex":"男"}},{"upsert":true}) //不执行任何操作

---------------------修改字段的数据类型

格式:

db.collectionName.find({"列名":{$type:Type Number}}).forEach(

function(x){

x.列名 = new NumberLong(x.列名);

db.collectionName.save(x);

}

)

将Int转化为String类型,只需将每条数据的int字段数据前后加上双引号

如:x.业务号码 = ""+x.业务号码+"";

-----------数组操作--------------------------------------------------------------------------------

1.$addToSet

往指定的数组中添加一个元素,如果该元素已经存在,则不作任何更新;

db.collection.update({_id:1},{$addToSet:{tags:"java"}}) ;往集合的tags数组中添加元素"java"

2.$pop

通过指定是1还是-1来删除数据的最后一个,或第一个元素

db.collection.update({_id:1},{$pop:{tags:1}}) //删除tags数组的最后一个元素

db.collection.update({_id:-1},{$pop:{tags:-1}})  //删除tags数组的第一个元素

3.$pullAll

删除数组中指定的所有元素

数据:{ _id: 1, scores: [ 0, 2, 5, 5, 1, 0 ] }

执行:db.collection.update( { _id: 1 }, { $pullAll: { scores: [ 0, 5 ] } } )

结果:{ "_id" : 1, "scores" : [ 2, 1 ] }

4.$pull

删除数组中指定的元素或者满足条件的元素

数据:{ _id: 1, votes: [ 3, 5, 6, 7, 7, 8 ] }

执行:db.collection.update( { _id: 1 }, { $pull: { votes: { $gte: 6 } } } )

结果:{ _id: 1, votes: [ 3, 5 ] }

5.$push

往数组中插入元素,可配合$each,$sort,$slice使用

$each:一般用于配合$push,$addToSet使用

$sort:必须配合$each使用

$slice:用于限制数组的元素个数

6.$position

用于向数组中添加元素时指定位置(默认会往数组的末尾添加)

数据:{ "_id" : 1, "scores" : [ 50, 60, 70, 100 ] }

执行:db.collection.update(

{_id:1},

{$push:{scores:{$each:[65,66],$position:2}}}

)

结果:{ "_id" : 1, "scores" : [ 50, 60, 65, 66, 70, 100 ] }

--------------------------------迁移

1.将集合A中的数据复制到集合B中

db.A.find({}).forEach(function(item){

db.B.insert(item);

})

MongoDB系列----uupdate和数组的更多相关文章

  1. mongodb系列之-治理mongodb->db.currentOp()

    mongodb系列之-管理mongodb->db.currentOp() 管理mongodb->db.currentOp(), 绝对是原创... 今天公司的dba在内部分享了针对mysql ...

  2. 14.MongoDB系列之配置分片

    1. 启动服务器 1.1 启动配置服务器 配置服务器是集群的大脑,保存着关于每个服务器包含哪些数据的所有元数据,因此,必须首先创建配置服务器. 由于资源限制,在同一机器上启动三个进程 # mkdir ...

  3. MongoDB系列(二):C#应用

    前言 上一篇文章<MongoDB系列(一):简介及安装>已经介绍了MongoDB以及其在window环境下的安装,这篇文章主要讲讲如何用C#来与MongoDB进行通讯.再次强调一下,我使用 ...

  4. MongoDB系列之二(主动复制)

    目前我正在进行MongoDB的双机热备方面相关的工作.根据我目前看到的MongoDB方面的材料,MongoDB的实际部署有三种方式,分别是“主动复制”,“副本集”以及“分片副本集”. 首先我们从最简单 ...

  5. mongodb系列之---副本集配置与说明

    在配置副本集之前,我们先来了解一些关于副本集的知识. 1,副本集的原理 副本集的原理与主从很相似,唯一不同的是,在主节点出现故障的时候,主从配置的从服务器不会自动的变为主服务器,而是要通过手动修改配置 ...

  6. MongoDB 系列文章

    MongoDB 系列文章 本文的内容是基于 MongoDB 4.0 的. 参考于 MongoDB 4.0 官方文档. 搭建 MongoDB从搭建到优化 MongoDB-副本集搭建与管理 管理 Mong ...

  7. mongoDB系列之(二):mongoDB 副本集

    1. 什么是副本集 副本集就是mongoDB副本所组成的一个集群. 同期原理是,写操作发生在主库,从库同步主库的OpLog日志. 集群中没有特定的主库,主库是选举产生,如果主库down了,会再选举出一 ...

  8. MongoDB系列六(聚合).

    一.概念 使用聚合框架可以对集合中的文档进行变换和组合.基本上,可以用多个构件创建一个管道(pipeline),用于对一连串的文档进行处理.这些构件包括筛选(filtering).投射(project ...

  9. MongoDB系列---用户及权限管理02

    MongoDB-——Privilege 学习大纲: 1.用户权限管理 2.用户操作 知识回顾:  本系列上一篇博文我们讲述了如何搭建环境以及配置我们的MongoDB,通过搭建环境后我们又学习了如何通过 ...

随机推荐

  1. 金蝶K3 WISE BOM多级展开_BOM成本表

    /****** Object: StoredProcedure [dbo].[pro_bobang_BOMCost] Script Date: 07/29/2015 16:09:11 ******/ ...

  2. 使用AltSearch格式化Kindle读书笔记

    AltSearch是LibreOffice Writer的一个用于自动化执行复杂文本替换操作的扩展,能够在不需要复杂编程的条件下进行一些文档格式的手动与批量转换和调整.该扩展除了支持普通文本与正则表达 ...

  3. phonegap走起

    最近phonegap已发布4.0的了..速度提升了不少,很给力.小白们可以看下如何构建phonegap开发平台. 此文将说明如何建立一个可以被vs2015打开的phonegap的项目.我还会加上ion ...

  4. 使用kubeadm创建kubernets集群

    参考:  http://docs.kubernetes.org.cn/459.html   https://blog.csdn.net/gui951753/article/details/833169 ...

  5. 一、自动化平台搭建-python虚拟环境安装

    主要知识点介绍: 安装django环境 创建django项目 设计模型类并利用模型类和数据库进行交互 使用django后台管理数据 编写视图函数,进行URL配置 模板的使用 图书-英雄案例完成 1.虚 ...

  6. Winfrom 动画实现

    Winform 动画实现 实际上是调用的系统的 Win32 class Animation { // 从左到右打开窗口 public const Int32 AW_HOR_POSITIVE = 0x0 ...

  7. SpringCloud使用Nacos服务发现实现远程调用

    本文使用SpringCloud结合Nacos服务发现,Feign远程调用做一个简单的Demo. 1 Nacos 关于Nacos之前写了两篇文章关于SpringBoot对它的使用,感兴趣可以查看一下. ...

  8. 17使用systemd方式开机自动启动Home Assistant服务

    2018-03-20 15:48:36 转移自网易博客! 首先使用编写文件hass@homeassistant.service,文件内容如下 # 这个文件用于systemd方式自动启动hass服务.# ...

  9. Petrozavodsk Summer-2016. Ural FU Dandelion Contest

    A. Square Function 留坑. B. Guess by Remainder 询问$lcm(1,2,3,...,n)-1$即可一步猜出数. 计算$lcm$采用分治FFT即可,时间复杂度$O ...

  10. 微信公众号_订阅号_access_token_创建菜单_菜单name+表情

    全局唯一接口调用凭据 access_token 用于接口调用的一个必要参数 有了 access_token 就能实现所有的接口 特点:  1. 有效期为 2 小时,所以 2 小时要更新一次,提前 5 ...