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中插入记录如上,更新和删除如下: * ----但是在更新和删除前,首先要找出要更新和删除 ...
随机推荐
- MySQL监控系统MySQL MTOP的搭建
MySQLMTOP是一个由Python+PHP开发的MySQL企业级监控系统.系统由Python实现多进程数据采集和告警,PHP实现WEB展示和管理.最重要是MySQL服务器无需安装任何Agent,只 ...
- Xamarin iOS编写第一个应用程序创建工程
Xamarin iOS编写第一个应用程序创建工程 在Xcode以及Xamarin安装好后,就可以在Xamarin Studio中编写程序了.本节将主要讲解在Xamarin Studio中如何进行工程的 ...
- 如何选中一个Checkbox,设置无效?
document.all.cb1[0].disabled = true;
- 简单几何(四边形形状) UVA 11800 Determine the Shape
题目传送门 题意:给了四个点,判断能构成什么图形,有优先规则 分析:正方形和矩形按照点积为0和长度判断,菱形和平行四边形按向量相等和长度判断,梯形按照叉积为0判平行.因为四个点是任意给出的,首先要进行 ...
- 详解Adorner Layer(zz)
首先,千万不要觉得Adorner离你很远,因为最简单的WPF界面也会用到Adorner.在WPF中,下面的几个很常见的功能,都是用Adorner实现的. 1. 光标(caret) 2. ...
- Html - 涟漪特效
这种效果稍加改造非常优雅.并且可以准确的实验触摸聚焦点.缺点是非常消耗内存.娱乐为主吧 js //╠═╬═╬═╬═╬═╬═╬═╬═╬═╬═╣ 涟漪特效 ╠═╬═╬═╬═╬═╬═╬═╬═╬═╬═╣ 涟漪 ...
- 最基本的session保存法,类似于默认的files方法
关于session的几个补充函数 在PHP下,关于session的讨论很多,其实在PHP4中还有几个函数是我们平时没有注意到的. 下面我把它们介绍给大家吧. 其中的session_set_save_h ...
- Excel 2003 中如何用VBA 代码访问单元格里的值及操作单元格 - 唐诗宋词的专栏 - 博客频道 - CSDN.NET
在Excel 中编写VBA 代码,最常做的事可能就是操作表单中单元格里的数据. 我这里总结一下如何从VBA 代码中操作单元格的数据. 在VBA 代码中操作单元格需要用到Range 对象,Range 是 ...
- 【贴图】网友 snoopy 用《iHMI43 液晶模块》做的界面给大家看看
请大家欣赏! iHMI43 4.3寸液晶模块购买地址: http://item.taobao.com/item.htm?id=20508376359
- NBOJv2 1034 Salary Inequity(DFS序+线段树区间更新区间(最值)查询)
Problem 1034: Salary Inequity Time Limits: 10000 MS Memory Limits: 200000 KB 64-bit interger IO ...