mongoDB 文档更新
来源:互联网 发布:淘宝直通车一天多少钱 编辑:程序博客网 时间:2024/06/07 22:26
mongoDB对于文档的更新,既可以实现文档的更新,也可以实现文档随意的增减键(列),这是与传统的关系型数据库最大的不同之处,也就是所谓的无模式带来的一定程度上的便利。即mongoDB支持文档更新,也支持文档替换。本文给出了mongoDB更新语法及示例。
预备热身
Linux下快速安装MongoDB
Windows平台下安装MongoDB
mongoDB 启动与停止
mongo shell连接到mongoDB及shell提示符下执行js脚本
mongoDB简介及关键特性
SQL与mongoDB对比及映射
一、文档更新语法
db.collection.update( <query>, //查询或过滤条件 <update>, //修改器(被修改键及内容) { upsert: <boolean>, //为true或者false,如果为true,未找到匹配文档则创建新文档 multi: <boolean>, //用于确定是单行还是更新所有行(true为所有行) writeConcern: <document> //设定写关注,用于确保强一致性还是弱一致性 } //后面的3.2之后的语法参数基本相同 ) db.collection.updateOne( //仅3.2之后版本 <filter>, <update>, { upsert: <boolean>, writeConcern: <document> } ) db.collection.updateMany( //仅3.2之后版本 <filter>, <update>, { upsert: <boolean>, writeConcern: <document> } ) db.collection.replaceOne( //仅3.2之后版本,用于替换文档 <filter>, <replacement>, { upsert: <boolean>, writeConcern: <document> } ) 更新相关事项 mongoDB中所有写操作是基于单个文档基本的原子性操作(3.2版本后) _id类不支持更新,也不支持使用一个不同的_id文档进行替换 文档的更新可能会导致文档变大,会重新申请及分配新的磁盘空间
二、演示文档更新
1、db.collection.updateOne()
//演示环境 db.version() 3.2.9 //插入演示数据,此处略,参考:mongoDB文档查询 插入演示数据部分 //链接地址 http://blog.csdn.net/leshami/article/details/52901240 //下面查询favorites.artist值为Picasso的文档 > db.users.find({"favorites.artist": "Picasso"}, {finished:0,points:0,badges:0}).pretty() { "_id" : 1, "name" : "sue", "age" : 19, "type" : 1, "status" : "P", "favorites" : { "artist" : "Picasso", "food" : "pizza" } } { "_id" : 6, "name" : "abc", "age" : 43, "type" : 1, "status" : "A", "favorites" : { "food" : "pizza", "artist" : "Picasso" } } //下面对favorites.artist值为Picasso的文档进行更新 //使用$set修改器来设置某个列的值,如下设置favorites.food的值pie,且type值为3 //使用$currentDate为新增的列lastModified设置当前日期 > db.users.updateOne( { "favorites.artist": "Picasso" }, { $set: { "favorites.food": "pie", type: 3 }, $currentDate: { lastModified: true } } ) { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } //查看更改后的文档结果 > db.users.find({"favorites.artist": "Picasso"}, {finished:0,points:0,badges:0}).pretty() { "_id" : 1, //这个文档已经被修改,且新增了列 "name" : "sue", "age" : 19, "type" : 3, "status" : "P", "favorites" : { "artist" : "Picasso", "food" : "pie" }, "lastModified" : ISODate("2016-09-30T07:25:28.135Z") } { "_id" : 6, //而_id为6的这个文档没有被修改,即updateOne方法仅更新一个文档 "name" : "abc", "age" : 43, "type" : 1, "status" : "A", "favorites" : { "food" : "pizza", "artist" : "Picasso" } }
2、db.collection.updateMany()
//下面更新favorites.artist值为Picasso的文档, //更新的内容为favorites.artist值为Pisanello,type的值为3,且增加或修改lastModified字段 > db.users.updateMany( { "favorites.artist": "Picasso" }, { $set: { "favorites.artist": "Pisanello", type: 3 }, $currentDate: { lastModified: true } } ) { "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 } //此处提示有2个匹配的文档,更新数为2 //再次查询favorites.artist值为Picasso的文档,其结果无任何文档返回,因为已经被更新 > db.users.find({"favorites.artist": "Picasso"}, ... {finished:0,points:0,badges:0}).pretty() //查询favorites.artist值为Pisanello的文档 > db.users.find({"favorites.artist": "Pisanello"}, ... {finished:0,points:0,badges:0}).pretty() { "_id" : 1, "name" : "sue", "age" : 19, //Author : Leshami "type" : 3, //Blog : http://blog.csdn.net/leshami "status" : "P", "favorites" : { "artist" : "Pisanello", "food" : "pie" }, "lastModified" : ISODate("2016-09-30T08:00:47.826Z") } { "_id" : 6, "name" : "abc", "age" : 43, "type" : 3, "status" : "A", "favorites" : { "food" : "pizza", "artist" : "Pisanello" }, "lastModified" : ISODate("2016-09-30T08:00:47.826Z") }
3、db.collection.update()
//下面使用db.collection.update()方式更新 > db.users.update( ... { "favorites.artist": "Pisanello" }, ... { ... $set: { "favorites.food": "pizza", type: 0, }, ... $currentDate: { lastModified: true } ... } ... ) //此更新结果,如下行,nMatched为一个文档,nModified为1个文档,即仅更新一个文档 WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) //等同于updateOne方法 > db.users.update( ... { "favorites.artist": "Pisanello" }, ... { ... $set: { "favorites.food": "pizza", type: 0, }, ... $currentDate: { lastModified: true } ... }, ... { multi: true } //使用参数multi,且值为true ... ) //从返回的结果可知,更新文档数为2,即所有满足条件的文档都被更新 WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 }) //等同于updateMany方法 //验证更新之后的结果 > db.users.find({"favorites.artist": "Pisanello"}, ... {finished:0,points:0,badges:0}).pretty() { "_id" : 1, "name" : "sue", "age" : 19, "type" : 0, "status" : "P", "favorites" : { "artist" : "Pisanello", "food" : "pizza" }, "lastModified" : ISODate("2016-09-30T09:31:10.524Z") } { "_id" : 6, "name" : "abc", "age" : 43, "type" : 0, "status" : "A", "favorites" : { "food" : "pizza", "artist" : "Pisanello" }, "lastModified" : ISODate("2016-09-30T09:31:10.524Z") }
4、db.collection.replaceOne()
//替换前文档的内容(name:"abc") > db.users.find({name:"abc"},{finished:0,points:0,badges:0}).pretty() { "_id" : 6, "name" : "abc", "age" : 43, "type" : 1, "status" : "A", "favorites" : { "food" : "pizza", "artist" : "Picasso" } } //下面使用db.collection.replaceOne()替换用户名为abc的文档,且替换了很多不同的键值 > db.users.replaceOne( ... { name: "abc" }, ... { name: "amy", age: 34, type: 2, status: "P", favorites: { "artist": "Dali", food: "donuts" } } ... ) { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } //这里提示有一个匹配,一个被更新 //验证替换后的结果 > db.users.find({name:"amy"},{finished:0,points:0,badges:0}).pretty() { "_id" : 6, "name" : "amy", "age" : 34, "type" : 2, "status" : "P", "favorites" : { "artist" : "Dali", "food" : "donuts" } } //使用db.collection.update方式可以实现相同的效果 > db.users.update( ... { name: "xyz" }, ... { name: "mee", age: 25, type: 1, status: "A", favorites: { "artist": "Matisse", food: "mango" } } ... ) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
三、小结
1、mongoDB文档更新有很多个不同的方法,传统的update,以及3.2版本之后的updateOne,updateMany
2、mongoDB文档替换也有很多个不通的方法,传统的update,以及3.2版本之后的replaceOnye,replaceMany
3、updateOne与updateMany是对update方法的扩展,update方法可以通过multi值为true或false来等同于updateMany以及updateOne
4、replaceOne与replaceMany也是对update方法的扩展,update方法可以通过multi值为true或false来等同于replaceMany以及replaceOne
0 0
- mongodb更新文档
- MongoDB更新文档
- MongoDB更新文档
- MongoDB 更新文档
- MongoDB 更新文档
- MongoDB 更新文档
- mongoDB 文档更新
- MongoDB 更新文档
- MongoDB 更新文档
- MongoDB 更新文档
- MongoDB 更新文档
- mongoDb 文档创建、更新、删除
- mongoDB子文档列表更新
- MongoDB 文档的更新操作
- MongoDB 文档的更新操作
- MongoDB 文档的更新操作
- MongoDb文档翻译-CRUD操作-更新文档
- MongoDB自学笔记12---4.4 更新文档
- it-前端--bootstrap30篇--快速入门
- QSound 播放声音
- 10.16-10.23工作周报
- 快速搭建Spring mvc4+mybatis+Maven项目
- 在velocity页面中使用jquery的相关问题
- mongoDB 文档更新
- [BFS+prime]Borg Maze
- 第九周项目3--稀疏矩阵的三元组表示的实现及应用--(2)两个稀疏矩阵相加的运算
- WebRTC:最有希望统一即时音视频服务的技术标准
- hdu 2222 Keywords Search(AC自动机)
- 新ATM机 学会使用面向对象的思想来编程
- 触发器使用手册
- Android架构学习
- sed的困惑