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. swift Reflection(字典转模型)变量继承本类类名解决办法

    class IWStatus: Reflect { var source: NSString! var created_at: NSString! var idstr: NSString! var u ...

  2. js进阶 13-2 jquery动画滑动效果哪些注意事项

    js进阶 13-2 jquery动画滑动效果哪些注意事项 一.总结 一句话总结:滑动里面这里up是隐藏,down是显示. 1.jquery动画默认的两个切换效果是什么(swing默认和linear的区 ...

  3. x=min(x, y)

    x = min(x, y); ⇒ 当然 y 会有多个值传递进来 minHeight = min(minHeight, h[i]); 置于循环之中,不断将当前得到的最小高度值和新加入进来的值进行比较: ...

  4. 得到INI文件所有Section(所有节点名称)

    char SectionNames[MAX_PATH],*pSectionName; ZeroMemory(SectionNames,MAX_PATH); GetPrivateProfileSecti ...

  5. codeforces 571B--Minimization(贪心+dp)

    D. Minimization time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  6. ds finder 唤醒

    http://www.hangge.com/blog/cache/detail_594.html

  7. [Angular] Test Directive

    directive: import { Directive, HostListener, HostBinding, ElementRef } from '@angular/core'; @Direct ...

  8. Centos6.5 网络配置

    网络配置 本教程配置说明 以下为本教程安装时的配置,用户依据实际情况进行调整 * 在root用户权限下安装下完毕 * IP地址设置为 10.10.108.160 * 本机DNS设置为 8.8.8.8 ...

  9. 怎样解决CRITICAL glance [-] AttributeError: &#39;NoneType&#39; object has no attribute &#39;drivername&#39;

    今天在配置OpenStack的Glance时.前边进行的都非常顺利.当作到这一步时sudo glance-manage db_sync时出现了例如以下错误 依据错误提示,想到可能是配置问题.于是就查找 ...

  10. 【u004】数列

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 有这样一种数列A1.A2.A3.--An,其中A1=0,且对任意一项Ai满足|Ai-A(i+1)|=1 ...