mongoDB 更改操作

格式对比 MySQL

update table set .... where ....

db.collection.updateOne(query,update,upsert)

修改函数

updateOne  修改首个

db.collection.updateOne(query,update,upsert)

功能  修改第一个复合条件的文档

参数

            query   筛选条件,用法同 findupdate  要修改的数据项, 配合修改操作符upsert  bool类型设置为 true    未查到则插入新文档设置为 false   默认是 false, 未查到则不修改

实例

将 aa 的年龄修改为 19 岁> db.class.updateOne({name:"aa"},{$set:{age:19}}){ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
未添加 upsert 为 true 时, 无匹配, 因此没变化> db.class.updateOne({name:"ww"},{$set:{age:19}}){ "acknowledged" : true, "matchedCount" : 0, "modifiedCount" : 0 }设置 upsert 为 true 时, 无匹配则会插入新文档> db.class.updateOne({name:"ww"},{$set:{age:19}},{upsert:true}){"acknowledged" : true,"matchedCount" : 0,"modifiedCount" : 0,"upsertedId" : ObjectId("5c779dbbe0253ec903878cd0")

updateMany  修改所有

db.collection.updateMany(query,update,upsert)

功能  修改所有符合条件的文档

参数  同 updateOne

实例

将所有年龄 小于18 的修改为 21> db.class.updateMany({age:{$lt:18}},{$set:{age:21}}){ "acknowledged" : true, "matchedCount" : 6, "modifiedCount" : 6 }>

update  修改所有

db.collection.update(query,update,upsert,multi)

功能  修改文档

参数

query   用法同 updateOne/updateMany
update   用法同 updateOne/updateMany
upsert    功能同 updateOne/updateMany写法上不在写在 {} 中, 直接  upsert=true/false 即可

multi    bool 值multi=false 同 updateOne 只修改首条 默认为 falsemulti=true 同 updateMany 修改全部

ps:

  mongoDB 全部的参数都位置传参,如果想传第四个,就必须传入第三个参数

实例

> db.class.update({age:21},{$set:{age:88}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

upsert 使用的时候,直接写 bool 即可> db.class.update({name:"yy"},{$set:{age:88}},true)WriteResult({"nMatched" : 0,"nUpserted" : 1,"nModified" : 0,"_id" : ObjectId("5c77a57ee0253ec903878d10")})

multi 使用同 upsert, 直接写 bool 即可> db.class.update({age:21},{$set:{age:88}},true,true)WriteResult({ "nMatched" : 5, "nUpserted" : 0, "nModified" : 5 })>

findOneAndUpdate  查找首个并修改

db.collection.findOneAndUpdate(query,update)

功能  查找第一个复合条件文档, 然后修改

参数  query update 用法同 updateOne/updateMany

返回值 修改前的文档

实例

查找名字 叫 cc 文档, 修改年龄为 26 > db.class.findOneAndUpdate({name:"cc"},{$set:{age:26}})
{"_id" : ObjectId("5c77910c4b2b9d43636830ca"),"name" : "cc","age" : 88,"sex" : "b","hobby" : ["python","football","computer"]
}

findOneAndReplace  查找首个并替换

db.collection.findOneAndReplace(query,doc)

功能  查找第一个复合条件文档, 然后替换

参数

  query   用法同 updateOne/updateMany

  doc     要替换的文档

返回值 修改前的文档

查找 名字 叫 cc 的文档, 将内容替换成 名字叫 zz 年龄 16 岁> db.class.findOneAndReplace({name:"cc"},{name:"zz",age:16})
{"_id" : ObjectId("5c77910c4b2b9d43636830ca"),"name" : "cc","age" : 26,"sex" : "b","hobby" : ["python","football","computer"]
}

如果 query 设置为空,则可以对第一条内容进行替换> db.class.findOneAndReplace({},{name:"kk",age:16}){"_id" : ObjectId("5c7790c94b2b9d43636830c8"),"name" : "aa","age" : 19,"sex" : "b","hobby" : ["draw","dance","running"]}

mongoDB 修改操作符(修改器)

修改的时候必须要使用修改器

如果用较老的 update 方法 确实可以不使用修改器, 但是实现效果是替换很不理想

本意想 查找 名字 yy 的文档,将 age 改为 99 > db.class.update({name:"yy"},{age:99})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

修改前: { "name" : "yy", "age" : 88 }
修改后: { "age" : 99 }

$set

修改一个域, 或者增加一个域

查找 age 为 99 的文档, 将名字 改为 yy> db.class.update({age:99},{$set:{name:"yy"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

修改前:{ "age" : 99}
修改后:{ "age" : 99, "name" : "yy" }

$unset

删除一个域

ps:

官方推荐 选定被删除域的时候值用 "" 空即可,当前其实随便字符都行,重点是匹配域, 而不是值

去除掉 年龄 99 的文档中的 age 域> db.class.update({age:99},{$unset:{age:""}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
修改前: { "age" : 99, "name" : "yy" }
修改后: { "age" : 99}

$rename

重命名一个域

将所有的含有 sex 域的文档的 sex 域 改名为 gender > db.class.updateMany({sex:{$exists:true}},{$rename:{sex:"gender"}})
{ "acknowledged" : true, "matchedCount" : 6, "modifiedCount" : 6 }

其实也不用刻意的去筛选, 系统会自动对存在该域的文档进行处理, 所以直接  {}  即可

> db.class.updateMany({},{$rename:{gender:"sex"}})
{ "acknowledged" : true, "matchedCount" : 10, "modifiedCount" : 6 }

$inc

加法修改器

让所有文档的 年龄 +1 > db.class.updateMany({},{$inc:{age:1}})
{ "acknowledged" : true, "matchedCount" : 10, "modifiedCount" : 10 }

修改前:  { "name" : "yy" }
修改后:  { "name" : "yy", "age" : 1 }

ps:

  值可以是正数,负数或者小数

  么有年龄字段的会产生 age:1 字段

$mul

乘法修改器

用法,参数同加法,只是运算由加法换成乘法

ps:

  怎么除法? *0.5 = /2

$setOnInsert

当使用 update*  插入文档时 ,作为 补充 内容

update* 在筛选无法命中存在文档时可以添加新内容,但是插入内容是全面 queryupdate 部分

当需要加入 额外字段 的时候, 使用此修改器

查找 name 为 77 age 为 15 的文档(查不到), 设置内容为 eat 域 的值为 many ,并且 额外加入 run 域 值为 fast > db.class.updateOne({name:"77",age:15},{$set:{eat:"many"},$setOnInsert:{run:"fast"}},{upsert:true})
{"acknowledged" : true,"matchedCount" : 0,"modifiedCount" : 0,"upsertedId" : ObjectId("5c788dbce0253ec903878dba")
}
>

ps:

  由此可见其实 update 的第二个参数 update 是可以多个修改器同时使用的

查找 名字 为 77 的文档, 将将 名字 改为 22 , 并且 去除 eat 域> db.class.update({name:"77"},{$set:{age:22},$unset:{eat:""}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
修改前:  { "age" : 15, "name" : "77", "eat" : "many", "run" : "fast" }
修改后:  { "age" : 22, "name" : "77", "run" : "fast" }

$max

指定值不低于下限

指定某个域的值如果小于该值则修改为该值, 大于则不变

指定 name 为 77 的文档的 age 域 的值 不能小于 20 > db.class.update({name:"77"},{$max:{age:20}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
修改前: { "age" : 22, "name" : "77", "run" : "fast" }
修改后: { "age" : 22, "name" : "77", "run" : "fast" }

指定 name 为 77 的文档 的 age 域 的值 不能小于 30> db.class.update({name:"77"},{$max:{age:30}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
修改前: { "age" : 22, "name" : "77", "run" : "fast" }
修改后: { "age" : 30, "name" : "77", "run" : "fast" }

$min

指定值不低于上限

用法同 $max 控制最大值不超过设定值,大于了就改成设定值

mongoDB 数组修改器

$push

向数组中添加一项

查找 name 为 dd 的文档, 将 hobby 域内的数组 增加一项 sing> db.class.update({name:"dd"},{$push:{hobby:"sing"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
修改前:  { "name" : "dd", "age" : 88, "hobby" : [ "football", "computer" ], "sex" : "b" }
修改后:  { "name" : "dd", "age" : 88, "hobby" : [ "football", "computer", "sing" ], "sex" : "b" }

$pushAll

向数组中添加多项

查找 name 为 dd 的文档, 将 hobby 域内的数组 增加多项 eat、run、cry> db.class.update({name:"dd"},{$pushAll:{hobby:["eat","run","cry"]}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
修改前:  { "name" : "dd", "age" : 88, "hobby" : [ "football" ], "sex" : "b" }
修改后:  { "name" : "dd", "age" : 88, "hobby" : [ "football", "eat", "run", "cry" ], "sex" : "b" }

$pull

从数组中删除一个值,如果有重复的值, 会全部删除

查找 名字 为 dd 删除 hobby 域内数组 的 eat> db.class.update({name:"dd"},{$pull:{hobby:"eat"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
修改前:  { "name" : "dd", "age" : 88, "hobby" : [ "football", "eat", "run", "cry" ], "sex" : "b" }
修改后:  { "name" : "dd", "age" : 88, "hobby" : [ "football", "run", "cry" ], "sex" : "b" }

$pullAll

从数组中删除多个值、如果有重复的值, 会全部删除

删除的时候也可以按照条件删除

查找 名字 为 dd 的文档,删除 hobby 域内数组的 eat、run> db.class.update({name:"dd"},{$pullAll:{hobby:["eat","run"]}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
修改前:  { "name" : "dd", "age" : 88, "hobby" : [ "football", "eat", "run", "cry" ], "sex" : "b" }
修改后:  { "name" : "dd", "age" : 88, "hobby" : [ "football", "cry" ], "sex" : "b" }

$pop

弹出数组中一项

只能弹出两头的第一个内容

  取值 为 1 弹出最后一项

  取值 为 -1 弹出第一项

删除 名字 为 dd 的 hobby 域内数组的 第一项> db.class.update({name:"dd"},{$pop:{hobby:1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
修改前:  { "name" : "dd", "hobby" : [ "football", "eat", "run", "cry" ] }
修改后:  { "name" : "dd", "hobby" : [ "football", "eat", "run" ] }

删除 名字 为 dd 的 hobby 域内数组的 最后一项
> db.class.update({name:"dd"},{$pop:{hobby:-1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
修改前:  { "name" : "dd", "hobby" : [ "football", "eat", "run", "cry" ] }
修改后:  { "name" : "dd", "hobby" : [ "eat", "run", "cry" ] }

$addToSet

向数组中添加一项

不能和已有值重复

如果是重复值则不做任何操作

查找 name 为 mm 的文档, 将 score 域内数组 添加 18 ,若存在则不作修改> db.class.updateOne({name:"mm"},{$addToSet:{score:18}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
修改前: { "name" : "mm", "age" : 12, "score" : [ 12, 16, 17 ] }
修改后: { "name" : "mm", "age" : 12, "score" : [ 12, 16, 17, 18 ] }
查找 name 为 mm 的文档, 将 score 域内数组 添加 18 ,若存在则不作修改
> db.class.updateOne({name:"mm"},{$addToSet:{score:18}}) { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
修改前: { "name" : "mm", "age" : 12, "score" : [ 12, 16, 17, 18 ] }
修改后: { "name" : "mm", "age" : 12, "score" : [ 12, 16, 17, 18 ] }

$each

对多个值逐一操作

查找 name 为 mm 的文档, 将 score 域内数组 逐一添加 89,26> db.class.updateOne({name:"mm"},{$push:{score:{$each:[89,26]}}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
修改前: { "name" : "mm", "age" : 12, "score" : [ 12, 16, 17, 18 ] }
修改后: { "name" : "mm", "age" : 12, "score" : [ 12, 16, 17, 18, 89, 26 ] }

$position

指定位置插入

需要配合 $each 使用, $each 提供值

$position 指定索引位置

 查找 name 为 mm 的文档,在 score 域内数组 将 90 添加在 索引 0 的位置> db.class.updateOne({name:"mm"},{$push:{score:{$each:[90],$position:0}}}){ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }修改前: { "name" : "mm", "age" : 12, "score" : [ 12, 16, 17, 18 ] }修改后: { "name" : "mm", "age" : 12, "score" : [ 90, 12, 16, 17, 18 ] }

$sort

对数组排序

搭配 $each 使用

  1 为升序,

  -1 为降序

查找 name 为 mm 的文档 ,将 score 域内数组 升序排列> db.class.updateOne({name:"mm"},{$push:{score:{$each:[],$sort:1}}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
修改前: { "name" : "mm", "age" : 12, "score" : [ 90, 12, 19, 17, 18 ] }
修改后: { "name" : "mm", "age" : 12, "score" : [ 12, 17, 18, 19, 90] }

转载于:https://www.cnblogs.com/shijieli/p/10460008.html

mongoDB 文档操作_改相关推荐

  1. mongodb文档操作1

    mongodb文档操作1 mongodb文档操作1 插入操作 1. 使用方法insert()分别插入以下文档到集合stu中. 2. 使用方法insertMany()插入以下一组文档到集合stu中. 删 ...

  2. mongodb文档操作

    增 #1.没有指定_id则默认ObjectId,_id不能重复,且在插入后不可变#2.插入单条 user0={"name":"egon","age&q ...

  3. MongoDB——文档操作(更新文档)

    目录 一.更新文档命令的格式 二.更新操作符 三.更新单个文档 3.1.更新单个文档的示例 四.更新多个文档 4.1.更新多个文档的概述 4.2.更新多个文档的示例 五.使用upsert命令 5.1. ...

  4. MongoDB——文档操作(插入文档)

    目录 一.新增单个文档 1.1.语法 1.2.示例 二.批量新增文档 2.1.语法 2.2.示例 三.批量插入随机数据 一.新增单个文档 1.1.语法 insertOne 向指定集合中插入单条文档数据 ...

  5. mongodb 输出数组字段_MongoDb文档操作、索引操作

    学习主题:MongoDb 学习目标: 掌握mongodb文档的更新 掌握mongodb文档的删除 掌握mongodb文档的查找 掌握mongodb文档的条件操作符 掌握mongodb中的索引操作 Mo ...

  6. MongoDB文档查询操作(三)

    关于MongoDB中的查询,我们已经连着介绍了两篇文章了,本文我们来介绍另外一个查询概念游标. 本文是MongoDB系列的第七篇文章,了解前面的文章有助于更好的理解本文: 1.Linux上安装Mong ...

  7. MongoDB文档查询操作(一)

    上篇文章我们主要介绍了MongoDB的修改操作,本文我们来看看查询操作. 本文是MongoDB系列的第五篇文章,了解前面的文章有助于更好的理解本文: 1.Linux上安装MongoDB 2.Mongo ...

  8. 商城项目(六)整合Mongodb实现文档操作

    商城项目(六)整合Mongodb实现文档操作 整合Mongodb的过程,以实现商品浏览记录在Mongodb中的添加.删除.查询为例. 环境搭建 Mongodb Mongodb是为快速开发互联网Web应 ...

  9. MongoDB入门学习(一)简介与基本操作、整合SpringBoot集合操作、整合SpringBoot文档操作

    文章目录 1. 简介 1.1 NoSQL和MongoDB 1.2 MongoDB特点 1.2.1 MongoDB 技术优势 1.2.2 Json 模型快速特性 1.3 MongoDB 应用场景 1.4 ...

最新文章

  1. Docker核心技术之Dockerfile
  2. Android -- TextView与EditText 同步显示
  3. Car-eye-http-flv-module 实现nginx-rtmp-mudule HTTP方式的FLV直播功能
  4. Elasticsearch之倒排索引
  5. 观山湖区计算机培训班学校,2020年观山湖区教育系统办公室主任培训顺利开班...
  6. npm常用命令:ini他、install、remove及编译运行工程、使用淘宝npm镜像
  7. 分布式系统的工程化开发方法
  8. linux 内核模块发送udp,在内核模块级缓冲UDP的问题(当然不是SOCKET编程了。)
  9. 学科分类与代码_考研常识 | 2021硕士研究生学科门类、一级学科、二级学科、专业目录及代码查询...
  10. 服务器配置tomcat,使用浏览器访问服务器资源
  11. Chrome 浏览器扩展神器暴力猴
  12. 我们真的会去吃3D打印食品吗?
  13. 《信息系统安全》课后习题答案(陈萍)
  14. HTTP/3 强势来袭?!
  15. ISE 下按键消抖实验
  16. linux websphere 端口号,Linux环境下配置websphere7.0的一些命令
  17. 小学计算机课优质课,2018年武汉市小学信息技术优质课评比
  18. 11.9-11.13宁阳东平五日
  19. Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null objec
  20. 高性能网络使DNS DDoS无损防护成为可能

热门文章

  1. EntityFramework 7.0之初探【基于VS 2015】(十)
  2. 两句话动态修改table数据并提交到后台
  3. 这三类问题是工控系统最大的威胁
  4. 如何学习iphone游戏开发
  5. 第十四章:springboot 定时任务
  6. 135.003 智能合约后端优化和产品化
  7. PHP 安全email
  8. 【selenium 3】 Mac 下测试环境搭建 Firefox 47+ gecko driver Mac
  9. C++中string查找和取子串和整形转化
  10. 用UML做好系统分析