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

Posted 小志的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB——文档操作(更新文档)相关的知识,希望对你有一定的参考价值。

目录

一、更新文档命令的格式

  • 可以用update命令对指定的数据进行更新,命令的格式如下:

    db.collection.update(query,update,options)
    
    参数作用
    query描述更新的查询条件
    options描述更新的选项
    upsert可选,如果不存在update的记录,是否插入新的记录。默认false,不插入
    multi可选,是否按条件查询出的多条记录全部更新。 默认false,只更新找到的第一条记录
    writeConcern可选,决定一个写操作落到多少个节点上才算成功。

二、更新操作符

操作符格式描述
$set$set:field:value指定一个键并更新值,若键不存在则创建
$unset$unset : field : 1 删除一个键
$inc$inc : field : value 对数值类型进行增减
$rename$rename : old_field_name :new_field_name 修改字段名称
$push $push : field : value 将数值追加到数组中,若数组不存在则会进行初始化
$pushAll$pushAll : field : value_array 追加多个值到一个数组字段内
$pull$pull : field : _value 从数组中删除指定的元素
$addToSet$addToSet : field : value 添加元素到数组中,具有排重功能
$pop$pop : field : 1 删除数组的第一个或最后一个元素

三、更新单个文档

3.1、更新单个文档的示例

示例需求:将books文档中的favCount字段自增的

  • 先查询所有文档

    > db.books.find()
    

  • 根据id更新books文档中的favCount字段自增

    > db.books.update(_id:ObjectId("62558ad4fc0392835a753c6b"),$inc:favCount:1)
    

  • 根据id查询books文档中的favCount字段,数量已自增1

    #根据id查询books文档中的favCount字段,数量已自增1
    > db.books.find(_id:ObjectId("62558ad4fc0392835a753c6b"))
    

四、更新多个文档

4.1、更新多个文档的概述

  • 默认情况下,update命令只在更新第一个文档之后返回,如果需要更新多个文档,则可以使用multi选项。
  • update命令的选项配置较多,为了简化使用还可以使用一些快捷命令:
    (1)、updateOne:更新单个文档。
    (2)、updateMany:更新多个文档。
    (3)、replaceOne:替换单个文档

4.2、更新多个文档的示例

示例需求:将books文档中分类为“novel”的文档的增加发布时间(publishedDate)

  • 先查询books文档中分类为“novel”的文档

    > db.books.find(type:"novel")
    

  • 将分类为“novel”的文档的增加发布时间(publishedDate)

    db.books.update(type:"novel",$set:publishedDate:new Date(),"multi":true)
    

  • 再次查询books文档中分类为“novel”的文档

五、使用upsert命令

5.1、upsert命令的概述

  • upsert是一种特殊的更新,其表现为如果目标文档不存在,则执行插入命令。

5.2、upsert命令的示例

  • 更新title为my book的文档

    > db.books.update( title:"my book", $set:tags:["nosql","mongodb"],type:"none",author:"fox", upsert:true )
    
  • 输出结果中nMatched、nModified都为0,表示没有文档被匹配及更新;nUpserted=1提示执行了upsert动作

六、实现replace语义

6.1、update实现replace语义的概述

  • update命令中的更新描述(update)通常由操作符描述,如果更新描述中不包含任何操作符,那么MongoDB会实现文档的replace语义。

6.2、update实现replace语义的示例

  • 先查询books文档中title为my book的文档

    > db.books.find(title:"my book")
    

  • update命令中不包含任何操作符

    > db.books.update( title:"my book", justTitle:"my first book" )
    

  • 再次查询books文档中title为my book的文档查询不到文档只能查询到justTitle为my first book的文档

     db.books.find(justTitle:"my first book")
    

七、findAndModify命令

7.1、findAndModify命令概述

  • findAndModify兼容了查询和修改指定文档的功能,findAndModify只能更新单个文档。
  • 该操作会返回符合查询条件的文档数据,并完成对文档的修改。
  • 默认情况下,findAndModify会返回修改前的“旧”数据。如果希望返回修改后的数据,则可以指定new选项

7.2、findAndModify命令示例1

示例需求:将books文档中的某个book文档的收藏数(favCount)加1

  • 先查询所有文档,获取第一条文档的id

    > db.books.find()
    

  • 根据获取到的第一条文档的id执行findAndModify命令

    db.books.findAndModify( query:_id:ObjectId("62558ad4fc0392835a753c6b"), update:$inc:favCount:1 )
    
  • 由下图输出结果可知,默认情况下,findAndModify会返回修改前的“旧”数据。

7.3、findAndModify命令示例2

  • 先查询所有文档,获取第一条文档的id

    > db.books.find()
    

  • 根据获取到的第一条文档的id执行findAndModify命令,并指定new选项

    db.books.findAndModify( query:_id:ObjectId("62558ad4fc0392835a753c6b"), update:$inc:favCount:1, new: true )
    
  • 如下图输出结果可知,指定new选项,findAndModify会返回修改后的“新”数据。

创作打卡挑战赛 赢取流量/现金/CSDN周边激励大奖

以上是关于MongoDB——文档操作(更新文档)的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB - 选择文档进行更新 - 选择后没有其他操作修改同一文档

MongoDB创建更新删除文档操作

03 MongoDB文档的各种增加更新删除操作总结

03 MongoDB文档的各种增加更新删除操作总结

Mongodb,使用选定的文档值使用单个操作更新同一文档中的字段

怎么使用java操作mongodb更新整个文档