今天继续很久没学习的mongodb的简单学习,今天来看的是更新。先来看简单的用法:

use updatetest 
>switched to db updatetest

首先插入一下: 
db.things.insert( { name : "test1"} )

db.things.find({name : "test1"}) 
会找到: 
  { "_id" : ObjectId("50f1778ea5ec290b7773303b"), "name" : "test1" }

更新的格式为: 
  db.collection.update( criteria, objNew, upsert, multi ) 
参数: 
criteria - 查询需要更新的项; 
objNew - 更新的对象或者 $ operators (例如 $inc) 这样的操作因子 
upsert - 是否是 "upsert"; 也就是说如果记录不存在是否插入新的记录 
multi - 是否所有满足criteria的在整个文档都更新 
注意:在缺省情况下,update()只会更新第一个满足条件的项。如果需要修改所以的满足条件的 
项的话,需要使用multi这个标志位。

db.things.update({name: "test1"}, {name: "test2"}) 
再find一下 
  db.things.find({name : "test2"}) 
会发现有test2了; 
   再来: 
db.things.update({name : "hello"}, {name: "hello,abc"}, true); 
  注意参数true这里的用法,结果为,因为hello没有,所以只会插入 
hello,abc了。 
  也可以写成: 
  db.things.update({name : "hello"}, {name: "hello,abc"}, { upsert: true }); 
注意: 
1、update方法只更新一条记录 
默认情况下update只更新符合查询条件的第一条找到的记录。如果想更新所有符合条件的记录,需要手动添加 multi 这个参数。

2、update方法的更新参数 
像下面这个语句 
updatetest.update( { _id: X }, {name: "Joe", age: 20 }); 
会把符合条件的原纪录按照{name: "Joe", age: 20 }完整替换,而不是简单的将name设为"Joe",age设为20. 
如果只想更改这2个值,而不是替换完整对象,应该写 
updatetest.update( { _id: X },{$set: {name: "Joe", age: 20 }}); 
   
   $inc的用法,比如统计经常要用到了,如: 
  db.things.update({BlogPost: "How To Do Upserts"}, {$inc: {Hits: 1}}, { upsert: true }); 
   
db.things.find({BlogPost : "How To Do Upserts"}) 
>{ "_id" : ObjectId("50f17b4541c33bd2459aafed"), "BlogPost" : "How To Do Upserts", "Hits" : 1 } 
再多运行两次:

db.things.update({BlogPost: "How To Do Upserts"}, {$inc: {Hits: 1}}, { upsert: true }); 
db.things.update({BlogPost: "How To Do Upserts"}, {$inc: {Hits: 1}}, { upsert: true }); 
>db.things.find({BlogPost : "How To Do Upserts"})

>{ "_id" : ObjectId("50f17b4541c33bd2459aafed"), "BlogPost" : "How To Do Upserts", "Hits" : 3 }

可以看到,hits变为3了。 
    
multi的用法: 
   比如: 
db.Indexing.insert( { name : "Denis", age : 10 } ) 
db.Indexing.insert( { name : "Denis", age : 20 } ) 
db.Indexing.insert( { name : "Denis", age : 30 } )

要将所有的denies的age都更新,必须加行multi: 
db.Indexing.update({name: "Denis"}, {$set: {age: 42}},{ multi: true })

Mongodb中更新的学习小结的更多相关文章

  1. Java中的equals学习小结

    Java中的equals是十分重要的,和= =要区别开来,现在小结其主要内容,而且要将 = =和 equals列为重要的对比概念来学习 1.声明格式    public  boolean equals ...

  2. listview中的adapter学习小结

    概述 Adapter是数据和UI之间的一个桥梁,在listview,gridview等控件中都会使用到,android给我们提拱了4个adapte供我们使用: BaseAdapter是一个抽象类,继承 ...

  3. java中继承关系学习小结

    继承:把多个类中同样的内容提取出来.定义到一个类中,其它类仅仅须要继承该类.就能够使用该类公开的属性和公开的方法.   继承的优点:提高代码的复用性.提高代码的可维护性.让类与类之间产生关系,是多态存 ...

  4. C# .NET Core 3.1中使用 MongoDB.Driver 更新嵌套数组元素和关联的一些坑

    C# .NET Core 3.1中使用 MongoDB.Driver 更新数组元素和关联的一些坑 前言: 由于工作的原因,使用的数据库由原来的 关系型数据库 MySQL.SQL Server 变成了 ...

  5. mongodb中的排序和索引快速学习

    在mongodb中,排序和索引其实都是十分容易的,先来小结下排序: 1 先插入些数据    db.SortTest.insert( { name : "Denis", age : ...

  6. MongoDB中的映射,限制记录和记录拼排序 文档的插入查询更新删除操作

    映射 在 MongoDB 中,映射(Projection)指的是只选择文档中的必要数据,而非全部数据.如果文档有 5 个字段,而你只需要显示 3 个,则只需选择 3 个字段即可. find() 方法 ...

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

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

  8. mongodb中分页显示数据集的学习

    这次继续看mongodb中的分页.首先依然是插入数据: 1) db.Blog.insert( { name : "Denis",  age : 20, city : "P ...

  9. MongoDB学习小结

    启动对应server:cd:到mangodb安装根目录下 mongod --dbpath db路径 创建MangoDB服务: mongod.exe --logpath d:/mongodb/logs/ ...

随机推荐

  1. 【图像处理】Gabor过滤器

    Gabor内核参考wiki 使用实数Real的公式计算核函数代码: Mat getGaborFilter(float lambda, float theta, float sigma2,float g ...

  2. ios基础-编程规范

    养成良好的编程习惯,是開始一门新语言的首要前提. (一)文档结构规范 1.建立Libs目录,存放第三方库 2.建立Tools目录,存放自己封装的类库 3.建立ViewControllers目录,存放全 ...

  3. IOS详解TableView——对话聊天布局的实现

    上篇博客介绍了如何使用UITableView实现类似QQ的好友界面布局.这篇讲述如何利用自定义单元格来实现聊天界面的布局. 借助单元格实现聊天布局难度不大,主要要解决的问题有两个: 1.自己和其他人说 ...

  4. JQuery Ajax实例总结

    jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯. 废话少说,直接进入正题,我们先来看一些简单的方法,这些方法都是对 ...

  5. SilkTest Q&A 9

    Q81:我应该如何存取excel sheet里面的空字符串? A81:定制代码如下: 解决方案1: [-] if sText!=NULL [ ] Page.tfldName.SetText(sText ...

  6. Windows Azure中的Affinity Group

    Affinity Group: (近亲组?个人认为直译为近亲组更好一些,不知道官方是怎么翻译的). 如何创建Affinity Group 1. 进入https://manage.windowsazur ...

  7. Android菜鸟的成长笔记(7)——什么是Activity

    原文:[置顶] Android菜鸟的成长笔记(7)——什么是Activity 前面我们做了一个小例子,在分析代码的时候我们提到了Activity,那么什么是Activity呢? Activity是An ...

  8. Goffi and Squary Partition

    题意: 给你N和K,问能否将N拆分成K个互不相同的正整数,并且其中K-1个数的和为完全平方数. PS:这道题目原来是要求输出一种可行方案的,所以下面题解是按照输出方案的思想搞的. 分析: 我们尝试枚举 ...

  9. hdu 5183(hash)

    传送门:Negative and Positive (NP) 题意:给定一个数组(a0,a1,a2,⋯an−1)和一个整数K, 请来判断一下是否存在二元组(i,j)(0≤i≤j<n)使得 NP− ...

  10. Delphi数组复制(只能使用System单元的Move函数)

    const AA : arrary[..] ,,,,) var BB : arrary[..] of byte; begin BB := AA ; {这样是错误的} Move(AA,BB,sizeof ...