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. 企业级中带你ELK如何实时收集分析Mysql慢查询日志

    什么是Mysql慢查询日志? 当SQL语句执行时间超过设定的阈值时,便于记录到指定的日志文件中或者表中,所有记录称之为慢查询日志 为什么要收集Mysql慢查询日志? 数据库在运行期间,可能会存在这很多 ...

  2. 理解DP(持续更新)

    理解DP author: thy from buaa 初见 dynamic programming(可以理解为动态刷表法 其实这里的programming并不是编程而是规划.设计表格的意思) 关于动态 ...

  3. Java 常用知识点

    Java 常用知识点 1.日期格式化 SimpleDateFormat Date date=new Date(System.currentTimeMillis()) ; SimpleDateForma ...

  4. 4. Spring 如何通过 XML 文件配置Bean,以及如何获取Bean

    在 Spring 容器内拼凑 bean 叫做装配.装配 bean 的时候,你是在告诉容器,需要哪些 bean ,以及容器如何使用依赖注入将它们配合在一起. 理论上,bean 装配的信息可以从任何资源获 ...

  5. dup(dup2/dup3)

    readme man~ NAME dup, dup2, dup3 - duplicate a file descriptor SYNOPSIS #include <unistd.h> in ...

  6. 转 InnoDB Error Handling

    14.20.4 InnoDB Error Handling Error handling in InnoDB is not always the same as specified in the SQ ...

  7. Installation of CarbonData 1.1.0 with Spark 1.6.2

    关键词:carbondata spark thrift 数据仓库 [Install thrift 0.9.3] 注意 要装thrift-java必须先装ant . 有人说要装boost,我在cento ...

  8. OI回忆录——一个过气OIer的制杖历程

    初中 初一参加学校信息学选修课,一周一节课,学pascal. 初一寒假(大约是)入选(其实是钦定吧)当时加上我只有3人的校队(我当然是最弱的一个. 当时甚至有幸得到叉姐授课(现在才知道这是多么难得的机 ...

  9. (54)Wangdao.com第七天_JavaScript 运算符

    JavaScript 运算符,也叫操作符 对一个或者多个值进行运算,都是会返回结果的. 比如: typeof    返回一个值的类型,返回值类型是字符串. 隐式类型转换: 任意值 = 任意值 + &q ...

  10. Dev_GridView自定义表格

    #region 自定义表格 //初始化测斜分析数据表 BandedGridView view = advBandedGridView1 as BandedGridView; view.BeginUpd ...