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中更新总结的更多相关文章

  1. Mongo中的数据类型

    一.null null用于表示空值或者不存在的字段 {"X" : null} 二.布尔型 布尔类型有两个值true和false {"x" : true} 三.数 ...

  2. MongoDB数据库中更新与删除数据

    MongoDB数据库中更新与删除数据 在MongoDB数据库中,可以使用Collection对象的update方法更新集合中的数据文档.使用方法如下所示: collection.update(sele ...

  3. Android 如何在 ListView 中更新 ProgressBar 进度

    =======================ListView原理============================== Android 的 ListView 的原理打个简单的比喻就是: 演员演 ...

  4. 系列文章:老项目的#iPhone6与iPhone6Plus适配#(持续更新中,更新日期2014年10月12日 星期日 )

    本文永久地址为http://www.cnblogs.com/ChenYilong/p/4020399.html ,转载请注明出处. ********************************** ...

  5. WPF 中更新界面信息

    1.Dispatcher.BeginInvoke int ii = 0; new Thread(new ParameterizedThreadStart((i) => { while (true ...

  6. 用自己的ID在appstore中更新app-黑苹果之路

    由于之前套用了别人的镜像,在appstore中更新XCode时总要输别人id的密码,id还不能改.网上有的说要把XCode删掉,然后再用自己的ID更新,找到另外一个方法,更简单: 1.打开引用程序目录 ...

  7. Android开发之ProgressDialog在独立Thread线程中更新进度

    简单的需求:在一个工作Thread中更新进度对话框ProgressDialog 遇到的问题: 1,创建需要Context,这个需要传进来 2,Thread中不能创建ProgressDialog,否则需 ...

  8. 在Oracle中更新数据时,抛出:ORA-01008: not all variables bound

    在Oracle中更新数据时,抛出了一个 :ORA-01008 not all variables bound, 我的理解是不是所有的变量/参数都有边界,不懂: 后来知道了,原来是“不是所有变量/参数都 ...

  9. 在DataTable中更新、删除数据

    /*在DataTable中选择记录*/            /* 向DataTable中插入记录如上,更新和删除如下:             * ----但是在更新和删除前,首先要找出要更新和删除 ...

随机推荐

  1. LinQ的一些基本语句

    LINQ(Language Integrated Query)即语言集成查询.它是一种语言特性和API,使得你可以使用统一的方式编写各种查询,查询的对象包括xml.对象集合.SqlServer数据库等 ...

  2. 【分享送书】NGUI全面实践教程V3.8.2 活动开始了!!

    [分享送书]NGUI全面实践教程V3.8.2 活动开始了!! 活动奖品:   活动地址:http://dwz.cn/JHdlu

  3. HDU4081 Qin Shi Huang's National Road System(次小生成树)

    枚举作为magic road的边,然后求出A/B. A/B得在大概O(1)的时间复杂度求出,关键是B,B是包含magic road的最小生成树. 这么求得: 先在原图求MST,边总和记为s,顺便求出M ...

  4. 【BZOJ】2946: [Poi2000]公共串

    http://www.lydsy.com/JudgeOnline/problem.php?id=2946 题意:给n个串,求最大公共子串.(1<=n<=5,每个串长度<=2000) ...

  5. 【wikioi】1034 家园(最大流+特殊的技巧)

    http://wikioi.com/problem/1034/ 太神了这题. 其实一开始我以为是费用流,但是总感觉不对. 原因是我没看到一句话,特定的时刻到达特定的点!! 也就是说,并不是每艘船每次都 ...

  6. 创建 maven 本地仓库; (五)

    在 pom.xml 添加依赖包的时候,有时候会提示无法从 http://repo1.maven.org/maven2/ 获取的情况,这时可配置个本地仓库: 从网上下载 maven 仓库网站源码包 Ne ...

  7. iOS开发之--UITextField属性

    UITextField属性 0.     enablesReturnKeyAutomatically 默认为No,如果设置为Yes,文本框中没有输入任何字符的话,右下角的返回按钮是disabled的. ...

  8. 发生了COMException 异常来自 HRESULT:0x80040228

    异常信息: 发生了COMException 异常来自 HRESULT:0x80040228 原因解决方法:窗体中忘记放LicenseControl控件.,加上LicenseControl即可

  9. ThinkPHP几个配置文件的位置

    1.常用的ThinkPHP\Conf\convention.php 2.ThinkPHP/Lib/Behavior/ParseTemplateBehavior.class.php模板引擎相关配置

  10. android之发送短信程序

    首先改写activity_main.xml文件 代码如下: <LinearLayout xmlns:android="http://schemas.android.com/apk/re ...