[轉]MongoDB更新操作replaceOne()實例講解


最近正在學習MongoDB,作為數據庫的學習當然是要從CRUD開始學起了。這篇文章默認讀者是知道如何安裝MongoDB、如何運行MongoDB實例以及了解了MongoDB中的collection、document等相關的概念。

    網上對於MongoDB的增刪改查操作的文章不少。但是不少都是舊版本的操作操作說明。MongoDB在3.2版本之后,增刪改查的命令發生了一些變化。有寫變化網上可以找得到,這句話說完想必大家也都知道后面我想說什么了。是的,就是關於replaceOne()這個方法的。目前為止,我還沒有發現一篇比較滿意的中文教程。這里就記錄一下自己學習replaceOne()的一些心得。

    以下的演示都是在ROBO 3T中操作完成的。

    首先介紹一下replaceOne()這個函數,它主要是起到更新的作用,除此之外還有一些別的作用。我們來看例子。創建一個restaurant集合,包含了以下數據:

//restaurant集合包含以下數據

{ "_id" : 1, "name" : "Central Perk Cafe", "Borough" : "Manhattan" },

{ "_id" : 2, "name" : "Rock A Feller Bar and Grill", "Borough" : "Queens", "violations" : 2 },

{ "_id" : 3, "name" : "Empire State Pub", "Borough" : "Brooklyn", "violations" : 0 }

    我們想嘗試replace一個文檔,文檔屬性name的值是"Central Perk Cafe",我們想把這個飯店的地點修改成“NewYork”

db.restaurant.replaceOne(

    {name:"Central Perk Cafe"},

    {name:"Central Perk Cafe", Borough:"NewYork"}

)

//匹配並修改成功

{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

//如果沒有匹配到這個文檔,例如我們傳入了錯誤的name值

{ "acknowledged" : true, "matchedCount" : 0, "modifiedCount" : 0 }

    replaceOne()還可以傳入參數UpSert,來看下面這個例子:

db.restaurant.replaceOne(

    {name:"Pizza Rat's Pizzaria"},

    {"_id":4, name" : "Pizza Rat's Pizzaria", "Borough" : "Manhattan", "violations" : 8 },

    {upsert:true}

)

//執行結果

{

    "acknowledged" : true,

    "matchedCount" : 0,

    "modifiedCount" : 0,

    "upsertedId" : 4

}

    當沒有匹配到帶有這個name屬性文檔的時候,由於傳入了upser參數,Mongo就自動為我們創建了這個文檔。這里為了對應前面的_id格式,我們顯式的指定了這個文檔的id是4,當然也可以交由MongoDB自動為我們生成。

    再來看replaceOne()的另外一個參數:Collation,我們首先添加一些測試數據

{ _id: 10, category: "café", status: "A" },

{ _id: 20, category: "cafe", status: "a" },

{ _id: 30, category: "cafE", status: "a" }

db.restaurant.replaceOne(

    { category: "cafe", status: "a" },

    { category: "cafÉ", status: "Replaced" },

    {collation:{locale:"fr",strength:1}}

)

    replaceOne()不僅替換了"cafÉ"的status,還進行了排序操作。

 

來源:https://www.2cto.com/database/201804/738609.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM