被MongoDB用bulkWrite暴打的後端小菜雞日記-day28-那些年被你遺漏的CRUD方法

鰻魚燒
Sep 28, 2022

--

花了六天講解Index之後,不曉得大家對建立索引是否有一些概念,至少知到如何建立索引吧?

至於索引的優化個人覺得需要一點時間,去觀察資料庫使用的狀況,如果發現有哪個collection的搜尋特別慢,代表可能需要加上索引,或是原本的索引已經不適合現在的搜尋方式,需要做修正。

Photo by Dariusz Sankowski on Unsplash

今天是講解MongoDB技術文章的最後一天,輕鬆一點只介紹bulkWrite的用法,這個方法可以讓我們一次寫入多個不同的資料操作,操作的種類有以下這些。

  1. insertOne:新增一筆資料
  2. updateOne:更新一筆資料
  3. updateMany:更新多筆資料
  4. replaceOne:取代一筆資料
  5. deleteOne:刪除一筆資料
  6. deleteMany:刪除多筆資料

假設我們目前資料庫,有以下這些商品資料

基本上bulkWrite寫法和aggregate很像,都是在陣列內寫入要執行的操作,而insertOne就和$match類似,代表要執行的操作,後面寫入要操作的資料。如果我們要新增一筆商品資料,可以這樣寫。

如果我們想要更新商品資料,可以使用updateOne,它只會更新符合filter條件的第一筆資料,但如果使用的是updateMany則是符合條件的所有資料,都會進行更新。

與updateOne不同的是,replaceOne會直接將整筆資料替換掉,所以要替換的資料一定要寫完整,如果像下面的範例只寫{ price: 3000 },會導致寫入不完整的資料,進入資料庫內。

replaceOne還可以透過設定upsert: true,當無法搜尋到符合條件的資料,並且取代,這時候會自動插入一筆資料進入collection,預設是upsert: false。

如果我們想要刪除資料可以使用deleteOne或deleteMany,差別一樣是deleteOne只會刪除符合filter條件的第一筆資料,而deleteMany則是刪除符合條件的所有資料。

--

--

鰻魚燒

剛轉職成後端工程師的小菜雞,分享自己的學習筆記