.NET 雲原生架構師訓練營(模組二 基礎鞏固 MongoDB 更新和刪除)--學習筆記

MingsonZheng發表於2021-01-03

2.5.4 MongoDB -- 更新和刪除

  • 整體更新
  • 更新欄位
  • 欄位操作
  • 陣列操作
  • 刪除

https://docs.mongodb.com/manual/reference/operator/update/

  • updateOne
  • updateMany
  • replaceOne

整體更新

db.questions.replaceOne({},{})

更新欄位

db.author.updateOne({"name":"mingson"},
    {
        $set: {"age": 20},
        $inc: {"view", -2}
    }
)

欄位操作

Name Description
$currentDate 設定為當前時間
$inc 原子級增減操作
$min 當傳入的值比資料庫中的值小時才更新
$max 當傳入的值比資料庫中的值大時才更新
$mul 原子級相乘
$rename 重新命名欄位
$set 設定欄位值
$setOnInsert 僅當
$unset 移除欄位
db.questions.updateOne({"tags": {$in: ["c#"]}},
    {
        $inc: {"view": NumberInt(-2)},
        $set: {"title": "第一個問題updated"}
    }
)

陣列操作

Name Description
$ 更新陣列的第一個元素
$[] 更新陣列的所有元素
array.[index] 更新指定下標元素
$addToSet 新增元素到陣列(當元素不存在於原來的陣列當中)
$pop 移除第一個或者最後一個元素
$pull 移除符合條件的陣列元素
$pullAll 移除指定元素
$push 新增到最後
$each 新增多個元素
$position 指定插入的位置
$slice 對資料切割
$sort 對陣列排序
$[] 更新指定條件的元素
// 把第一個包含 test2 的陣列的元素改為 test3,即把陣列元素裡面第一個 test2 改為 test3,而不是陣列的第一個元素
db.questions.updateOne({"tags": {$in: ["test2"]}}, {$set: {"tags.$": "test3"}})

// 更新所有元素,所有 test2 更新為 test3
db.questions.updateOne({"tags": {$in: ["test2"]}}, {$set: {"tags.$[]": "test3"}})

// 更新指定下標元素
db.questions.updateOne({"tags": {$in: ["test2"]}}, {$set: {"tags.2": "c#"}})

// 新增元素到陣列(當元素不存在於原來的陣列當中)
db.questions.updateOne({"tags": {$in: ["test2"]}}, {$addToSet: {"tags": "c#"}})

// 移除第一個
db.questions.updateOne({"tags": {$in: ["test2"]}}, {$pop: {"tags": -1}})

// 移除最後一個元素
db.questions.updateOne({"tags": {$in: ["test2"]}}, {$pop: {"tags": 1}})

// 移除符合條件的陣列元素
db.questions.updateOne({"tags": {$in: ["test2"]}}, {$pull: {"tags": {$in: ["c#"]}}})

// 移除指定元素
db.questions.updateOne({"tags": {$in: ["test2"]}}, {$pullAll: {"tags": ["test3", "asp.net core"]})

// 新增到最後
db.questions.updateOne({"tags": {$in: ["test2"]}}, {$push: {"tags": "test3"})

// 新增多個元素
db.questions.updateOne({"tags": {$in: ["test2"]}}, {$each: {"tags": ["c#", "test3"]})

// 指定插入的位置
db.questions.updateOne({"tags": {$in: ["test2"]}}, {$push: {"tags": {$each: ["c#", "test3"], $position: 0}})

// 對資料切割,對陣列排序
db.students.update(
   { _id: 5 },
   {
     $push: {
       quizzes: {
          $each: [ { wk: 5, score: 8 }, { wk: 6, score: 7 }, { wk: 7, score: 6 } ],
          $sort: { score: -1 },
          $slice: 3
       }
     }
   }
)

// 更新指定條件的元素,把 answers 中 content 為 回答一 的設定為 回答
db.questions.updateOne({"tags": {$in: ["test2"]}}, {set: {"answers.$[elem].content": "回答", {"arrayFilters": [{"elem.content": "回答一"}]}}})

刪除

https://docs.mongodb.com/manual/tutorial/remove-documents/

db.inventory.deleteOne( { status: "D" } )

db.inventory.deleteMany({ status : "A" })

知識共享許可協議

本作品採用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。

歡迎轉載、使用、重新發布,但務必保留文章署名 鄭子銘 (包含連結: http://www.cnblogs.com/MingsonZheng/ ),不得用於商業目的,基於本文修改後的作品務必以相同的許可釋出。

如有任何疑問,請與我聯絡 (MingsonZheng@outlook.com) 。

相關文章