• 5.更新文档


    将文档存入数据库之后,可以使用以下几种更新方法之一对其进行更改,updateOne,updateMany和replaceOne.

    updateOne和updateMany都将筛选文档作为第一个参数,将变更文档作为第二个参数,后者对要进行的更改进行描述。replaceOne同样将筛选文档作为第一个参数,但第二个参数是用一个用来替换所匹配的筛选文档的新文档。

    更新文档是属于原子性操作:如果两个更新同时发生,那么首先到达服务器得的更新会先被执行,然后再执行下一个更新。因此,相互冲突的更新可以安全地迅速连接完成,而不会破坏任何文档,最后一次更新将”成功“。如果不想使用默认行为,则可以考虑使用文档版本控制模式.

    > db.four.find();
    { "_id" : 1, "name" : "ll", "age" : 20 }

    使用修饰符"$set"

    > db.four.updateOne({"_id":1},{"$set":{"age":22}})
    { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

    更新后的数据

    > db.four.find();
    { "_id" : 1, "name" : "ll", "age" : 22 }

    "$set"用来设置一个字段的值。如果这个字段不不存在,则创建该字段。这对于更新模式或添加用户定义的键来说非常方便。

    • Update操作执行格式:db.<集合>.update(<查询条件>,<更新字段>)
    • 以下面的数据为例
    > db.fruit.insertMany([{name:"apple"},{name:"pear"},{name:"orange"}])
    {
        "acknowledged" : true,
        "insertedIds" : [
            ObjectId("625a67daa1fbd7dca4520184"),
            ObjectId("625a67daa1fbd7dca4520185"),
            ObjectId("625a67daa1fbd7dca4520186")
        ]
    }
    > 
    > 
    > db.fruit.find();
    { "_id" : ObjectId("625a67daa1fbd7dca4520184"), "name" : "apple" }
    { "_id" : ObjectId("625a67daa1fbd7dca4520185"), "name" : "pear" }
    { "_id" : ObjectId("625a67daa1fbd7dca4520186"), "name" : "orange" }
    > 
    > db.fruit.updateOne({"name":"apple"},{$set:{from:"China"}})   ##如果这里没有from字段的话,会直接进行添加。。。
    { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
    > 
    > db.fruit.find();
    { "_id" : ObjectId("625a67daa1fbd7dca4520184"), "name" : "apple", "from" : "China" }
    { "_id" : ObjectId("625a67daa1fbd7dca4520185"), "name" : "pear" }
    { "_id" : ObjectId("625a67daa1fbd7dca4520186"), "name" : "orange" }
    > 
    • 使用updateOne表示无论条件匹配多少条记录,始终只更新第一条
    • 使用updateMany表示条件匹配多少条就更新多少条
    • updateOne/updateMany方法要求更新条件部分必须具有以下之一,否则将报错:
      •  $set/$unset
      •  $push/$pushAll/$pop
      •  $pull/$pullAll
      •  $addToset

      1.$push:增加一个对象到数组底部

      2.$pushAll:增加多个对象到数组底部

      3.$pop:从数组底部删除一个对象

      4.$pull:如果匹配指定哦值,从数组中删除相应的对象

      5.$pullAll:如果匹配任意的值,从数据中删除相应的对象

      6.$addToset:如果不存在则增加一个值到数组。

    这里示范更新一个子文档

    > db.fruit.find()  //原始的模样,这里要求把count字段的值有china更新为American
    { "_id" : ObjectId("625a67daa1fbd7dca4520184"), "name" : "apple", "from" : "China" }
    { "_id" : ObjectId("625a67daa1fbd7dca4520185"), "name" : "pear" }
    { "_id" : ObjectId("625a67daa1fbd7dca4520186"), "name" : "orange" }
    { "_id" : ObjectId("625a7016a1fbd7dca4520187"), "name" : "apple", "from" : { "count" : "china", "province" : "Guangdong" } }
    > 

    更新操作:注意前面的是一个过滤条件,取具体的_id的那一列。。。然后后面的就是开始更新,注意from.count的写法(这个很重要)

    > db.fruit.updateOne({"_id":ObjectId("625a7016a1fbd7dca4520187")},{$set:{"from.count":"Ame"}})   //更新
    { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
    > 

    这里还有一个需求是:我想把count字段修改为country字段

    > db.fruit.updateOne({"_id":ObjectId("625a7016a1fbd7dca4520187")},{"$rename":{"from.count":"from.country"}},false,true)   //这里使用关键词rename
    { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
    > db.fruit.find();
    { "_id" : ObjectId("625a67daa1fbd7dca4520184"), "name" : "apple", "from" : "China" }
    { "_id" : ObjectId("625a67daa1fbd7dca4520185"), "name" : "pear" }
    { "_id" : ObjectId("625a67daa1fbd7dca4520186"), "name" : "orange" }
    { "_id" : ObjectId("625a7016a1fbd7dca4520187"), "name" : "apple", "from" : { "province" : "Guangdong", "country" : "Ame" } }
    > 
  • 相关阅读:
    Visual Studio 连接不上NuGet 官方程序包源的解决办法
    Microsoft Toolkit 2.5下载 – 一键激活Windows 8.1/2012 R2/Office 2013
    Intel® Ethernet Connection I217-V 网卡驱动(win10 ,2012)
    flashfxp3.41中文版注册码:(适合最新版本)
    Fiddler对安卓应用手机抓包图文教程
    网址检查器1.0
    Win10打不开chm文件的解决办法
    Android HTTP通讯
    对Android开发者有益的40条优化建议
    IIS下PHP的三种配置方式比较
  • 原文地址:https://www.cnblogs.com/zmc60/p/16152946.html
Copyright © 2020-2023  润新知