Mongo中更新总结
mongo中的更新其实也可以当做添加来使用
mongo中跟新有几种方式
save、update、upsert
执行save的时候如果这个文档有_id这个参数,save 会调用 upsert,否则会调用 insert
upsert修改速度要比update快
使用upsert如果修改的这个数据不存在,则会创建一条新的数据
各种修改器
$inc 、 $set
其中 $inc 只能修改数值类型的数据,修改别的类型的数据会报错
db.ansheng.update({"aaaaa":20},{"$inc":{"aaaaa":-19}},true) upsert
db.ansheng.update({"aaaaa":20},{"$inc":{"aaaaa":-19}}) update
db.ansheng.save({"_id" : ObjectId("5706032acd0a6194868cf53e"),"aaaaa":20}) save
使用save的时候要注意save修改的时候,相当于把这个文档,给替换了。
比如:上面的这个save语句,修改目标数据的时候只会修改aaaaa这个字段,别的字段都会给删掉
使用save的时候如果前面的查询参数不是 _id ,他就会创建一个新的文档
上面是三种最简单的修改,都是只修改一个字段
用save 的时候会影响到别的字段
用update和upsert就不会影响到别的字段
数组的修改
{
"_id" : ObjectId("5706032acd0a6194868cf53e"),
"aaaaa" : 20.0,
"book" : ["在绝望中寻找希望", "C#大全", "Mongo权威指南"]
}
修改 book 中的数据
db.ansheng.update({"aaaaa":20},{"$set":{"book.0":"干你妹三千"}},true) 通过数组的下标修改这个数组
db.ansheng.update({"aaaaa":20},{"$set":{"book.0":"干你妹三千"}}) 通过数组的下标修改这个数组
db.ansheng.save({"_id" : ObjectId("5706032acd0a6194868cf53e"),"aaaaa":20,"book":["在绝望中寻找希望","C#大全","Mongo权威指南"]}) 修改整个文档
批量更新
db.ansheng.update({"aaaaa" : 1},{"$set":{"book" : ["在绝望中寻找希望", "C#大全", "Mongo权威指南","干你妹三千"]}},true,true)
update 的第四个参数是用来控制是否批量更新的。
内嵌文档的修改
{
"_id" : ObjectId("5706032acd0a6194868cf53e"),
"aaaaa" : 2.0,
"book" : ["在绝望中寻找希望", "C#大全", "Mongo权威指南"],
"list" : [{
"name" : "乔安生",
"age" : 23.0,
"school" : "驻马店第一高级中学"
}, {
"name" : "张三",
"age" : 18.0,
"school" : "驻马店市第一初级学校"
}]
}
现在有这么一个文档,对list中的数据进行一系列的操作
db.ansheng.save({"_id" : ObjectId("5706032acd0a6194868cf53e"),"aaaaa":2,"book":["在绝望中寻找希望","C#大全","Mongo权威指南"],"list":[{"name":"乔安生","age":23,"school":"驻马店第一高级中学"},{"name":"张三","age":18,"school":"驻马店市第一初级学校"}]})
总结
save、update、upsert
save只能进行整体的修改
update和upsert都可以实现局部的修改(必须加上 $set 修改器,如果不加会修改文档中全部的数据)
update修改的时候如果修改的内容相同则不会修改
upsert不管相不相同都会修改
因为update 修改的时候会先到数据库中查询一下,如果相同就不会修改,所以update 的效率就会比 upsert 低一点
所以个人感觉
upsert的效率最高
update的效率其次
save的效率最低
Mongo中更新总结的更多相关文章
- Mongo中的数据类型
一.null null用于表示空值或者不存在的字段 {"X" : null} 二.布尔型 布尔类型有两个值true和false {"x" : true} 三.数 ...
- MongoDB数据库中更新与删除数据
MongoDB数据库中更新与删除数据 在MongoDB数据库中,可以使用Collection对象的update方法更新集合中的数据文档.使用方法如下所示: collection.update(sele ...
- Android 如何在 ListView 中更新 ProgressBar 进度
=======================ListView原理============================== Android 的 ListView 的原理打个简单的比喻就是: 演员演 ...
- 系列文章:老项目的#iPhone6与iPhone6Plus适配#(持续更新中,更新日期2014年10月12日 星期日 )
本文永久地址为http://www.cnblogs.com/ChenYilong/p/4020399.html ,转载请注明出处. ********************************** ...
- WPF 中更新界面信息
1.Dispatcher.BeginInvoke int ii = 0; new Thread(new ParameterizedThreadStart((i) => { while (true ...
- 用自己的ID在appstore中更新app-黑苹果之路
由于之前套用了别人的镜像,在appstore中更新XCode时总要输别人id的密码,id还不能改.网上有的说要把XCode删掉,然后再用自己的ID更新,找到另外一个方法,更简单: 1.打开引用程序目录 ...
- Android开发之ProgressDialog在独立Thread线程中更新进度
简单的需求:在一个工作Thread中更新进度对话框ProgressDialog 遇到的问题: 1,创建需要Context,这个需要传进来 2,Thread中不能创建ProgressDialog,否则需 ...
- 在Oracle中更新数据时,抛出:ORA-01008: not all variables bound
在Oracle中更新数据时,抛出了一个 :ORA-01008 not all variables bound, 我的理解是不是所有的变量/参数都有边界,不懂: 后来知道了,原来是“不是所有变量/参数都 ...
- 在DataTable中更新、删除数据
/*在DataTable中选择记录*/ /* 向DataTable中插入记录如上,更新和删除如下: * ----但是在更新和删除前,首先要找出要更新和删除 ...
随机推荐
- 解决Fiddler无法抓到手机的会话包
解决Fiddler无法抓到手机的会话包 使用Fiddler抓手机的会话包涉及多个方面,所以容易出现无法抓取包的情况.遇到这类问题,需要按照以下顺序进行检查和排除. (1)在Fiddler中设置 ...
- js网页换肤
使网页背景颜色可选黄/粉 <html> <head> <meta charset="utf-8"> <meta name="ge ...
- DataGrid排序
DataGrid是ASP.NET中非常重要的一个控件.它能方便的让我们实现编辑.排序功能:但是排序功能默认的是升序(ASC),能不能让DataGrid同时实现升降序排列呢?这篇文章将给你一个比较好的解 ...
- 【转】STL之二分查找 (Binary search in STL)
Section I正确区分不同的查找算法count,find,binary_search,lower_bound,upper_bound,equal_range 本文是对Effective STL第4 ...
- BZOJ3776 : 警察局
怎么3776又换题目了…换题目了…题目了…目了…了… SCC缩点后只有入度或者出度为0的点必须要放警察局 假设一共有t-1个入度或者出度为0的SCC q[1]-q[t-1]表示这些SCC中点的个数 q ...
- dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系以及换算(终结版)
首先,说下概念(网上很多帖子几个地方都搞混了,理一下): dip : device independent pixels ,设备无关像素. 我看很多帖子写的五花八门的,关于d的,什么display ...
- SPIE Example References
Journal Article[1] Davis, A. R., Bush, C., Harvey, J. C. and Foley, M. F., "Fresnel lenses in r ...
- Ubuntu 循环遍历当前目录下所有文本文件中的字符
sudo grep -n 'xxxx' -r ./*
- spark Mllib SVM实例
Mllib SVM实例 1.数据 数据格式为:标签, 特征1 特征2 特征3…… 0 128:51 129:159 130:253 131:159 132:50 155:48 156:238 157: ...
- FZU 2092 bfs+记忆化搜索
晚上团队训练赛的题 和普通bfs不同的是 这是同时操纵人与影子两个单位进行的bfs 由于可能发生人和影子同时接触水晶 所以不可以分开操作 当时使用node记录人和影子的位置 然后进行两重for循环来分 ...