persons该文件的数据如下面的:

> db.persons.find()

{ "_id" : 2, "name" : 2 }

{ "_id" : 3, "name" : 3 }

> db.persons.update({_id:4},{_id:4,name:4})

WriteResult({ "nMatched" : 0, "nUpserted" : 0, "nModified" : 0 })

> db.persons.find()

{ "_id" : 2, "name" : 2 }

{ "_id" : 3, "name" : 3 }

做完update操作,依旧看不到_id:4的记录。由于update方法须要一个true指示器。才会对查询不到的记录进行insert操作:

> db.persons.update({_id:4},{_id:4,name:4},true)

WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : 4 })

> db.persons.find()

{ "_id" : 2, "name" : 2 }

{ "_id" : 3, "name" : 3 }

{ "_id" : 4, "name" : 4 }

现有需求。将persons文档中的name为"3"的改成"33"

> db.persons.update({name:"3"},{$set:{name:"33"}},false,true)

false含义:若查不到name:"33"的键值对,则不运行插入操作,true含义:表示是批量更新

为persons添加age:"88"属性

> db.persons.update({name:"4"},{$set:{age:"88"}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.persons.find()

{ "_id" : 2, "name" : "33" }

{ "_id" : 3, "name" : "33" }

{ "_id" : 4, "name" : "4", "age" : "88" }

将age加2

> db.persons.update({name:"4"},{$inc:{age:2}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.persons.find()

{ "_id" : 2, "name" : "33" }

{ "_id" : 3, "name" : "33" }

{ "_id" : 4, "name" : "4", "age" : 90 }

将age属性拿走:

> db.persons.update({age:90},{$unset:{age:1}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.persons.find()

{ "_id" : 2, "name" : "33" }

{ "_id" : 3, "name" : "33" }

{ "_id" : 4, "name" : "4" }

给persons文档添加一条记录,_id为5

> db.persons.insert({_id:5,name:5,books:[]})

WriteResult({ "nInserted" : 1 })

> db.persons.find()

{ "_id" : 2, "name" : "33" }

{ "_id" : 3, "name" : "33" }

{ "_id" : 4, "name" : "4" }

{ "_id" : 5, "name" : 5, "books" : [ ] }

给books数组添加一个元素:"js"和"extjs4.0"

> db.persons.update({_id:5},{$push:{books:"js"}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.persons.find()

{ "_id" : 2, "name" : "33" }

{ "_id" : 3, "name" : "33" }

{ "_id" : 4, "name" : "4" }

{ "_id" : 5, "name" : 5, "books" : [ "js" ] }

> db.persons.update({_id:5},{$push:{books:"extjs4.0"}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.persons.find()

{ "_id" : 2, "name" : "33" }

{ "_id" : 3, "name" : "33" }

{ "_id" : 4, "name" : "4" }

{ "_id" : 5, "name" : 5, "books" : [ "js", "extjs4.0" ] }

创建一个新的classes数组:

> db.persons.update({_id:5},{$push:{classes:"01class"}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.persons.find()

{ "_id" : 2, "name" : "33" }

{ "_id" : 3, "name" : "33" }

{ "_id" : 4, "name" : "4" }

{ "_id" : 5, "name" : 5, "books" : [ "js", "extjs4.0" ], "classes" : [ "01class"

 ] }

为calsses数组一次添加几个元素:

> db.persons.update({_id:5},{$pushAll:{classes:["02class","03class","04class"]}}

)

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.persons.find()

{ "_id" : 2, "name" : "33" }

{ "_id" : 3, "name" : "33" }

{ "_id" : 4, "name" : "4" }

{ "_id" : 5, "name" : 5, "books" : [ "js", "extjs4.0" ], "classes" : [ "01class"

, "02class", "03class", "04class" ] }

删除_id是5的记录,并创建一个新的_id是5的记录,使用$addToSet,此命令会检查要加入的元素在数组里面是不是存在,存在就不会再加入。否则会加入:

> db.persons.remove({_id:5})

WriteResult({ "nRemoved" : 1 })

> db.persons.find()

{ "_id" : 2, "name" : "33" }

{ "_id" : 3, "name" : "33" }

{ "_id" : 4, "name" : "4" }

> db.persons.insert({_id:5,books:["js"]})

WriteResult({ "nInserted" : 1 })

> db.persons.find()

{ "_id" : 2, "name" : "33" }

{ "_id" : 3, "name" : "33" }

{ "_id" : 4, "name" : "4" }

{ "_id" : 5, "books" : [ "js" ] }

> db.persons.update({_id:5},{$addToSet:{books:"js"}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

> db.persons.find()

{ "_id" : 2, "name" : "33" }

{ "_id" : 3, "name" : "33" }

{ "_id" : 4, "name" : "4" }

{ "_id" : 5, "books" : [ "js" ] }

> db.persons.update({_id:5},{$addToSet:{books:"java"}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.persons.find()

{ "_id" : 2, "name" : "33" }

{ "_id" : 3, "name" : "33" }

{ "_id" : 4, "name" : "4" }

{ "_id" : 5, "books" : [ "js", "java" ] }

> db.persons.update({_id:5},{$addToSet:{books:"mongo"}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.persons.find()

{ "_id" : 2, "name" : "33" }

{ "_id" : 3, "name" : "33" }

{ "_id" : 4, "name" : "4" }

{ "_id" : 5, "books" : [ "js", "java", "mongo" ] }

删除books数组的第一个元素:"js"。使用$pop命令:

> db.persons.update({_id:5},{$pop:{books:-1}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.persons.find()

{ "_id" : 2, "name" : "33" }

{ "_id" : 3, "name" : "33" }

{ "_id" : 4, "name" : "4" }

{ "_id" : 5, "books" : [ "java", "mongo" ] }

> db.persons.update({_id:5},{$pop:{books:1}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.persons.find()

{ "_id" : 2, "name" : "33" }

{ "_id" : 3, "name" : "33" }

{ "_id" : 4, "name" : "4" }

{ "_id" : 5, "books" : [ "java" ] }

-1代表第一个元素,1代表最后一个元素

也能够使用pull命令一次删除一个指定的元素:

> db.persons.find()

{ "_id" : 2, "name" : "33" }

{ "_id" : 3, "name" : "33" }

{ "_id" : 4, "name" : "4" }

{ "_id" : 5, "books" : [ "java", "mongo", "js" ] }

> db.persons.update({_id:5},{$pull:{books:"js"}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.persons.find()

{ "_id" : 2, "name" : "33" }

{ "_id" : 3, "name" : "33" }

{ "_id" : 4, "name" : "4" }

{ "_id" : 5, "books" : [ "java", "mongo" ] }

$pullAll命令能够一次指定多个要删除的元素:

> db.persons.update({_id:5},{$pullAll:{books:["java","mongo"]}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.persons.find()

{ "_id" : 2, "name" : "33" }

{ "_id" : 3, "name" : "33" }

{ "_id" : 4, "name" : "4" }

{ "_id" : 5, "books" : [ ] }

创建一条新的记录_id为6:

> db.persons.find()

{ "_id" : 2, "name" : "33" }

{ "_id" : 3, "name" : "33" }

{ "_id" : 4, "name" : "4" }

{ "_id" : 5, "books" : [ ] }

{ "_id" : 6, "books" : [ { "type" : "js", "name" : "extjs4.0" }, { "type" : "db"

, "name" : "mongodb" }, { "type" : "js", "name" : "jquery" } ] }

为type是js的books元素加入pens:"too long"属性。使用.符号一定使用双引號引用

> db.persons.update({"books.type":"js"},{$set:{"books.$.author":"tom"}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.persons.find()

{ "_id" : 2, "name" : "33" }

{ "_id" : 3, "name" : "33" }

{ "_id" : 4, "name" : "4" }

{ "_id" : 5, "books" : [ ] }

{ "_id" : 6, "books" : [ { "type" : "js", "name" : "extjs4.0", "author" : "tom"

}, { "type" : "db", "name" : "mongodb" }]

 }

db.persons.update({"books.type":"js"},{$set:{"books.$.pens":"too long"}})

推断数组元素运行插入操作,反复的元素不会被插入第二次:

> db.persons.find()

{ "_id" : 2, "name" : "33" }

{ "_id" : 3, "name" : "33" }

{ "_id" : 4 }

{ "_id" : 5, "books" : [ "js" ] }

> db.persons.update({_id:5},{$addToSet:{books:{$each:["js","db","java"]}}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.persons.find()

{ "_id" : 2, "name" : "33" }

{ "_id" : 3, "name" : "33" }

{ "_id" : 4 }

{ "_id" : 5, "books" : [ "js", "db", "java" ] }

版权声明:本文博主原创文章,博客,未经同意不得转载。

mongodb 批量更新 数组的键操作的文件的更多相关文章

  1. mongodb批量更新操作文档的数组键

    persons文档的数据如下: > db.persons.find(){ "_id" : 2, "name" : 2 }{ "_id" ...

  2. MongoDB批量更新和批量插入的方式

    最近,在调试代码中发现向MongoDB插入或者更新文档记录时若是多条的话都是采用for循环操作的,这样的处理方式会造成数据操作耗时,不符合批量处理的原则:对此,个人整理了一下有关MongoDB的批量更 ...

  3. MongoDB创建\更新\删除文档操作

     一.插入\创建文档 --当插入一个不存在的文档时,会自己主动创建一个文档 [root@racdb ~]# mongo MongoDB shell version: 2.4.14 connecti ...

  4. mongodb批量更新某个字段

    查询出hospitalName是xx医院和openId以2开头的所有记录,并且更新my_booking表中的payType为1. db.getCollection('my_booking').find ...

  5. c# Mongodb批量更新

    public void Put(List<OnlineItem> datas)         {             try             {                ...

  6. Mongodb 批量更新

    >db.col.update({查询条件},{修改条件},{multi:true})

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

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

  8. MongDB 批量更新

    最近公司在使用mongodb.  批量更新的语句为: db.table.update(  {'wo': {$in: [ "123", "456"]}}, {$s ...

  9. MongoDB学习笔记~大叔分享批量添加—批量更新—批量删除

    回到目录 说它是批量操作,就是说将集合对象一次提交到服务器,并对数据进行持久化,如果您的代码是一次一次的提交,那不算是批量操作!在之前的mongodb仓储中并没有对批量更新和批量删除进行实现,而今天在 ...

随机推荐

  1. ZOJ 2421 Recaman's Sequence

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1421 题目大意: 定义a^m为 a^m = a^(m-1) - m  如果a^ ...

  2. IT从业人员关注哪些问题

    技术人员关注的问题非常多,但常见的至少有以下6种.特此整理,抓住核心问题,解决它. 一个人的精力和时间往往非常有限,能把核心问题都解决到位就是成功. 1.职业规划 大家从读小学开始,就是在为职业规划过 ...

  3. [Docker] Create Docker Volumes for Persistent Storage

    Docker containers are stateless by default. In order to persist filesystem changes, you must use doc ...

  4. AForge,Emgu.CV抓拍图像大小

    原文:AForge,Emgu.CV抓拍图像大小 2017年,忙忙碌碌地过去了,象往年一样,依然没有时间上CSDN,博客园. 这一年是打工以来最辛苦的一年. 这一年用了不少自己没有接触过的东西.如人脸识 ...

  5. [TypeStyle] Reusable styles using TypeStyle mixins

    TypeStyle’s style function allows you to give multiple objects as an argument. This provides a simpl ...

  6. 2. pushd . :将当前文件夹压入栈,使用popd能够回到该文件夹。

    1.man -t  ls | ps2pdf -> ls.pdf生成pdf格式的ls帮助文件. 2. pushd . :将当前文件夹压入栈,使用popd能够回到该文件夹. 3.find -type ...

  7. DirectX 11游戏编程学习笔记之1: 开场白

    本文由哈利_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com           这是我之前的博客系列"DirectX9.0c游戏开发手记之'龙书'第二版学习笔记 ...

  8. [Angular] How to styling ng-content

    Let's say you are builing a reuseable component. The style structure like this: div > input If yo ...

  9. Android学习笔记:Home Screen Widgets(2):关于Widget

    通过widget定义,我们在widget列表中看到了我们的TestWidget.当我们拖拽widget到主页时,假设在appwidet-provider中定义了android:configure的ja ...

  10. thinkphp缩略图

    <?php class IndexAction extends Action { public function index() { $Photo = M('Photo'); $list = $ ...