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. 【Codeforces Round #433 (Div. 1) C】Boredom(树状数组)

    [链接]h在这里写链接 [题意] 给你一个n*n的矩阵. 其中每一列都有一个点. 任意两个点构成了矩形的两个对角点 ->即任意两个点确定了一个矩形. ->总共能确定n*(n-1)/2个矩形 ...

  2. linux系统进程的查看与控制

    原文:linux系统进程的查看与控制 一.什么是进程? 进程就是系统未完成并且正在进行的工作. 二.查看系统进程 1.图形方式查看 gnome-system-monitor 2.进程查看命令 ps - ...

  3. leetcode笔记:Remove Duplicates from Sorted Array II

    一.题目描写叙述 二.解题技巧 这道题和Remove Duplicates from Sorted Array这道题是相似的.仅仅只是这里同意出现反复的数字而已,能够採用二分搜索的变种算法.仅仅只是增 ...

  4. LLRB——红黑树的现代实现

    一.本文内容 以一种简明易懂的方式介绍红黑树背后的逻辑实现2-3-4树,以及红黑树的插入.删除操作,重点在2-3-4树与红黑树的对应关系上,并理清红黑树相关操作的来龙去脉.抛弃以往复杂的实现,而分析红 ...

  5. js页面载入特效如何实现

    js页面载入特效如何实现 一.总结 一句话总结:可以加选择器(里面的字符串)作为参数,这样函数就可以针对不同选择器,就很棒了. 1.特效的原理是什么? 都是通过标签的位置和样式来实现特效的. 二.js ...

  6. 网站访问优化(二):开启apache服务器gzip压缩

    昨天,把带宽从1M升级到2M,使用cdn版本的jquery之后,网站访问速度由平均5s(在禁止缓存的情况下,使用缓存大概在2.8s)下降到2.8s的样子. 今天,继续优化. 第1步:   把图片进行了 ...

  7. [Http] Understand what an HTTP Request is

    Let's look at several HTTP requests to learn the basic structure of these messages, and how the vari ...

  8. Nutch+Hadoop集群搭建 分类: H3_NUTCH 2015-01-18 10:55 362人阅读 评论(0) 收藏

    转载自:http://www.open-open.com/lib/view/open1328670771405.html 1.Apache Nutch    Apache Nutch是一个用于网络搜索 ...

  9. 益智小游戏(app)

    最好的益智类游戏要基于一定的数学原理. 一笔完成:(拓扑学,哥尼斯堡问题) 哥尼斯堡七桥问题

  10. 逐步把Nginx及Redis引入项目组之负载均衡技术调研初版总结

    本篇以一个Nginx服务.两个Tomcat服务.一个Redis搭建一个负载均衡环境,由于就一台电脑暂以随机分配client请求策略开展,详细工作中推荐以IP地址来实现client请求的动态负载策略.省 ...