4/13 每日任務連結


觀念解說 – MongoDB 基本操作: 修改、刪除

修改

修改單筆資料

updateOne() 第一個參數透過設定符合的屬性找出要修改的資料,若第一個參數帶入空物件 {},則會選取全部資料的第一筆資料,第二個參數放入要修改的屬性,需先加上 $set 物件,並在此物件中帶入要修改的物件屬性
第二個參數可選擇帶入 $currentDate 屬性,會再修改資料成功後顯示出最新修改的時間

修改多筆資料

刪除

刪除一筆資料

只刪除一筆符合條件的資料

刪除多筆資料

刪除全部資料

參考資源


解題

題目(將答案寫在 HackMD 並提交至回報區)

若尚未做前一天的每日任務,需先建立一個 database(名稱可自定義),並建立一個 students collection
將以下資料新增至 students collection(若已做完前一天的每日任務,可繼續沿用已建立的 students collection

insertMany() 方法加入多筆資料,第一個參數是用 [] 陣列下包多筆物件,一次建立多筆資料。

指定其中一個 _id ,並將該筆 document 的 group 改為 D

使用 .findOne() 方法找到第一筆資料

取到 _id 對象 ObjectId("6256fbabfddedd5ce0f03b89"),在查找一次確定取得正確。

執行後回傳內容如下,得到 "group" : "A"

group 改為 D

執行指令後回傳 { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 },在使用指令 db.students.find({ '_id': ObjectId("6256fbabfddedd5ce0f03b89") }) 查尋對象,回傳結果如下。

試著加入指令第二參數的部份,在多加上一個欄位屬性設定 $currentDate: { lastModified: true } 更動時加上時間,執行結果回傳 { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

使用指令 db.students.find({ '_id': ObjectId("6256fbabfddedd5ce0f03b89") }) 查尋對象,回傳結果如下。

最後一個屬性欄位多加上 "lastModified" : ISODate("2022-04-13T16:48:40.279Z")

將 group 為 B 的多筆 document 的 isPaid 改為 true

查尋對象 { 'group': 'B' }

執行指令後回傳取得三筆資料。

執行多筆資料更新,使用 .updateMany() 方法,第一個參數設定對象為 { 'group': 'B' },將資料以 $set 更動,將其中的欄位都更動為 'isPaid': true

執行指令後回傳結果如下。

執行 db.students.find({ 'group': 'B' }) 指令查看更新過的資料,

欄位上有在加上時間屬性欄位 "lastModified" : ISODate("xxxxxxxx",回傳結果如下。

將 studentName 包含關鍵字 Brennan 的 document 刪除

會以模糊查找查字串 Brennan,會需要使用正則表達式用二個斜線 /<查尋字串>/ 包查找的字串尋找 ( /Brennan/)。

使用完整字串是找不到相關資料,輸入指令會跳到下一行。

執行後回傳結果,正確取得其中有 Brennan 的資料。

接著使用刪除指令進行刪除,因為一筆可使用 .deleteOne() 刪單筆,也可用 .deleteMany() 刪多筆,這裡使用刪除多筆的方式進行。

執行後回傳訊息

在使用下面指令查找資料,執行後沒有回傳訊息直接跳到下一行。,指令如下

將 isPaid 為 true 的多筆 document 刪除

指令執行結果回傳如下,取到三筆資料。

接著進行刪除多筆資料,使用 .deleteMany() 方法,指令如下

指令執行後回傳如下。

查尋 'isPaid': true 對象,執行指令後直接跳到下一行。