博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MongoDB: update 操作
阅读量:6099 次
发布时间:2019-06-20

本文共 4261 字,大约阅读时间需要 14 分钟。

因为MongoDB 复杂的数据结构, 所以查询修改的语法要比RDBMS 的单表操作要复杂一些。 下面记录一些常见的Update 操作。

db.collection.update(    
,
, { upsert:
, multi:
})

 

在MongoDB 2.6, 又多支持了一个选项 writeConcern: <document>。

  • <query> 决定什么样的document 会被更新
  • <update> 决定符合条件的document 会被更新成什么样
  • option upsert: 默认为false, 如果设为true, 如果<query> 没有match 里面的任何操作,这个update 会变成insert
  • option multi: 默认为false, 即使<query> 里面有很多记录,也只会更新第一行。

 

常用原型

db.table.update(<query>, <document>), 符合query 条件的第一条整条记录会被<document> 代替, <document> 没有使用$set 操作符号。

mongolog:PRIMARY> db.test.insert({"name":"name1", "params": {"p1":"v1", "p2": "v2"}, "type": "type1"})WriteResult({ "nInserted" : 1 })mongolog:PRIMARY> db.test.findOne(){    "_id" : ObjectId("5456e188bc391a4f85e4aa4f"),    "name" : "name1",    "params" : {        "p1" : "v1",        "p2" : "v2"    },    "type" : "type1"}mongolog:PRIMARY> db.test.update({"name":"name1"}, {"type":"type2"})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })mongolog:PRIMARY> db.test.findOne(){ "_id" : ObjectId("5456e051bc391a4f85e4aa4e"), "type" : "type2" } // 只剩下了type

 

db.table.update(<query>, {$set: {"key": "document"}}). 仅仅key 对应的document 会被document 代替, 如果对应的Key 没有,则添加这个key.

  • 如果只想修改param 的值,其他列的值保持不变:
mongolog:PRIMARY> db.test.update({"name":"name1"}, {$set: {"params": {"p2":"newV2"}}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })mongolog:PRIMARY> db.test.findOne(){    "_id" : ObjectId("5456e406bc391a4f85e4aa51"),    "name" : "name1",    "params" : {        "p2" : "newV2"  // Params 中只剩下p2    },    "type" : "type1"}

 

  • 如果想只更新里面params.p2 的值,则需要
mongolog:PRIMARY> db.test.update({"name": "name1"}, {$set: {"params.p2":"newV2"}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })mongolog:PRIMARY> db.test.findOne(){    "_id" : ObjectId("5456e267bc391a4f85e4aa50"),    "name" : "name1",    "params" : {        "p1" : "v1",        "p2" : "newV2"  // 只有p2 的值被更改    },    "type" : "type1"}
  • 如果想增加一个params.p3, 只需要:
mongolog:PRIMARY> db.test.update({"name": "name1"}, {$set: {"params.p3":"v3"}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })mongolog:PRIMARY> db.test.findOne(){    "_id" : ObjectId("5456e267bc391a4f85e4aa50"),    "name" : "name1",    "params" : {        "p1" : "v1",        "p2" : "newV2",        "p3" : "v3"      },    "type" : "type1"}

 

db.table.update(<query>, <document>, { multi: true } ) 修改所有的符合条件的document。 

mongolog:PRIMARY> db.test.update({"name":"name1"}, {"$set": {"params.p4":"v4"}}) // 没有设置{mutli:true}, 只更新了一行WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })mongolog:PRIMARY> db.test.find(){ "_id" : ObjectId("5456e406bc391a4f85e4aa51"), "name" : "name1", "params" : { "p1" : "v1", "p2" : "v2" }, "type" : "type1" }{ "_id" : ObjectId("5456e267bc391a4f85e4aa50"), "name" : "name1", "params" : { "p1" : "v1", "p2" : "newV2", "p3" : "v3", "p4" : "v4" }, "type" : "type1" }mongolog:PRIMARY> db.test.update({"name":"name1"}, {"$set": {"params.p5":"v5"}}, {multi:true})WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })mongolog:PRIMARY> db.test.find(){ "_id" : ObjectId("5456e406bc391a4f85e4aa51"), "name" : "name1", "params" : { "p1" : "v1", "p2" : "v2", "p5" : "v5" }, "type" : "type1" }{ "_id" : ObjectId("5456e267bc391a4f85e4aa50"), "name" : "name1", "params" : { "p1" : "v1", "p2" : "newV2", "p3" : "v3", "p4" : "v4", "p5" : "v5" }, "type" : "type1" }

 

db.table.update(<query>, <document>, {"upsert": true}) 如果没有matched 的文档,就会新insert 一行

mongolog:PRIMARY> db.test.update({"name":"name2"}, {$set: {"params.p2": "v22"}}, {"upsert": true})WriteResult({"nMatched" : 0,"nUpserted" : 1,"nModified" : 0,"_id" : ObjectId("5456e580c71b89fa66bff2f5")})mongolog:PRIMARY> db.test.find(){ "_id" : ObjectId("5456e406bc391a4f85e4aa51"), "name" : "name1", "params" : { "p1" : "v1", "p2" : "v2", "p5" : "v5" }, "type" : "type1" }{ "_id" : ObjectId("5456e267bc391a4f85e4aa50"), "name" : "name1", "params" : { "p1" : "v1", "p2" : "newV2", "p3" : "v3", "p4" : "v4", "p5" : "v5" }, "type" : "type1" }{ "_id" : ObjectId("5456e580c71b89fa66bff2f5"), "name" : "name2", "params" : { "p2" : "v22" } }    db.parameter.update({}, {
$unset: {"hareware": ""}}, {multi:true})

转载于:https://www.cnblogs.com/zhfan/p/4070607.html

你可能感兴趣的文章
登记申请汇总
查看>>
Google最新截屏案例详解
查看>>
2015第31周一
查看>>
2015第31周日
查看>>
在使用EF开发时候,遇到 using 语句中使用的类型必须可隐式转换为“System.IDisposable“ 这个问题。...
查看>>
PHP使用DES进行加密和解密
查看>>
Oracle 如何提交手册Cluster Table事务
查看>>
BeagleBone Black第八课板:建立Eclipse编程环境
查看>>
在服务器上用Fiddler抓取HTTPS流量
查看>>
文件类似的推理 -- 超级本征值(super feature)
查看>>
【XCode7+iOS9】http网路连接请求、MKPinAnnotationView自定义图片和BitCode相关错误--备用...
查看>>
各大公司容器云的技术栈对比
查看>>
记一次eclipse无法启动的排查过程
查看>>
【转】jmeter 进行java request测试
查看>>
读书笔记--MapReduce 适用场景 及 常见应用
查看>>
SignalR在Xamarin Android中的使用
查看>>
走过电竞之路的程序员
查看>>
Eclipse和MyEclipse使用技巧--Eclipse中使用Git-让版本管理更简单
查看>>
[转]响应式表格jQuery插件 – Responsive tables
查看>>
8个3D视觉效果的HTML5动画欣赏
查看>>