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. CodeForces 300C 最短路

    A Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Pr ...

  2. WPF/Silverlight Template使用及总结(转)

    WPF/Silverlight 中的控件都有Style和Template两种属性.前者解释为样式,是用来改变控件原有属性的,比如 Button 控件的(Width,Height,Background ...

  3. Codeforces Round #295 (Div. 2)

    水 A. Pangram /* 水题 */ #include <cstdio> #include <iostream> #include <algorithm> # ...

  4. protected(C# 参考)

    protected 关键字是一个成员访问修饰符.受保护成员在它的类中可访问并且可由派生类访问.有关 protected 与其他访问修饰符的比较,请参见可访问性级别. 仅当访问通过派生类类型发生时,基类 ...

  5. ural 1434. Buses in Vasyuki

    1434. Buses in Vasyuki Time limit: 3.0 secondMemory limit: 64 MB The Vasyuki University is holding a ...

  6. HDU 1241 (DFS搜索+染色)

    题目链接:  http://acm.hdu.edu.cn/showproblem.php?pid=1241 题目大意:求一张地图里的连通块.注意可以斜着连通. 解题思路: 八个方向dfs一遍,一边df ...

  7. 【BZOJ】1043: [HAOI2008]下落的圆盘(计算几何基础+贪心)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1043 唯一让我不会的就是怎么求圆的周长并QAAQ... 然后发现好神!我们可以将圆弧变成$[0, 2 ...

  8. ASP.NET RepeatLayout 属性

    定义和用法 RepeatLayout 属性用于设置或获取如何显示在 CheckBoxList 中的项目. 语法 <asp:CheckBoxList RepeatLayout="mode ...

  9. SSH全注解开发

    web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=&quo ...

  10. python表达式

    算术表达式: 地板除: >>> 10 // 3 3>>> 5 // 2 2>>> 5 // 31 取余: >>> 10 % 31 ...