Memperbarui Data Dokumen MongoDB Menggunakan mongo shell
Pada bagian ini, kita akan mempelajari cara memperbarui data dokumen MongoDB melalui mongo shell. MongoDB mendukung berbagai cara pembaruan yang diimplementasikan oleh berbagai jenis operator, dan juga mendukung beberapa fungsi pembaruan.
Persiapkan Data Uji
Masukkan sejumlah data uji ke dalam koleksi inventory.
db.inventory.insertMany( [
{ item: "kanvas", qty: 100, size: { h: 28, w: 35.5, uom: "cm" }, status: "A" },
{ item: "jurnal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
{ item: "matras", qty: 85, size: { h: 27.9, w: 35.5, uom: "cm" }, status: "A" },
{ item: "bantalan mouse", qty: 25, size: { h: 19, w: 22.85, uom: "cm" }, status: "P" },
{ item: "buku catatan", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "P" },
{ item: "kertas", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
{ item: "rencana", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
{ item: "kartu pos", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" },
{ item: "buku sketsa", qty: 80, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
{ item: "blok sketsa", qty: 95, size: { h: 22.85, w: 30.5, uom: "cm" }, status: "A" }
] );
Syntax Operator Pembaruan
Untuk memperbarui dokumen, MongoDB menyediakan beberapa operator pembaruan (misalnya, $set) untuk memodifikasi nilai bidang.
Format parameter operator pembaruan adalah sebagai berikut:
{
<operator pembaruan>: { <bidang1>: <nilai1>, ... },
<operator pembaruan>: { <bidang2>: <nilai2>, ... },
...
}
Penjelasan:
-
: Operator pembaruan -
: Nama bidang -
: Parameter bidang
Operator $set
Digunakan untuk memperbarui dokumen dan membuat bidang baru jika bidang tersebut tidak ada.
Memperbarui Satu Dokumen
Perbarui dokumen menggunakan metode db.collection.updateOne().
db.inventory.updateOne(
{ item: "kertas" },
{
$set: { "size.uom": "cm", status: "P" },
$currentDate: { lastModified: true }
}
)
Penjelasan pembaruan:
- Pertama, dapatkan dokumen pertama menggunakan kondisi query (item = kertas).
- Gunakan operator $set untuk memperbarui nilai bidang size.uom menjadi cm dan memperbarui nilai bidang status menjadi P.
- Gunakan operator $currentDate untuk memperbarui nilai bidang lastModified menjadi tanggal saat ini. Jika bidang lastModified tidak ada, $currentDate akan membuat bidang tersebut.
Memperbarui Beberapa Dokumen
Gunakan metode db.collection.updateMany() untuk memperbarui beberapa dokumen yang memenuhi kondisi.
db.inventory.updateMany(
{ "qty": { $lt: 50 } },
{
$set: { "size.uom": "in", status: "P" },
$currentDate: { lastModified: true }
}
)
Penjelasan pembaruan:
- Pertama, dapatkan semua dokumen menggunakan kondisi query (qty < 50).
- Gunakan operator $set untuk memperbarui nilai bidang size.uom menjadi in dan memperbarui nilai bidang status menjadi P.
- Gunakan operator $currentDate untuk memperbarui nilai bidang lastModified menjadi tanggal saat ini. Jika bidang lastModified tidak ada, $currentDate akan membuat bidang tersebut.
Tip: Operator $lt mewakili arti kurang dari.
Mengganti Dokumen
Gunakan metode db.collection.replaceOne() untuk mengganti konten dari sebuah dokumen (kecuali untuk kolom _id). Dokumen pengganti boleh memiliki kolom-kolom yang berbeda dari dokumen asli. Karena kolom _id bersifat tidak berubah, kolom ini dapat dihilangkan. Namun, jika Anda menyertakan kolom _id, nilai id harus konsisten dengan id dari dokumen yang sedang diperbarui.
db.inventory.replaceOne(
{ item: "kertas" },
{ item: "kertas", stok: [ { gudang: "A", jumlah: 60 }, { gudang: "B", jumlah: 40 } ] }
)
Penjelasan:
- Pertama, gunakan kriteria kueri (item=kertas) untuk mendapatkan dokumen pertama.
- Ganti dokumen yang cocok dengan konten dari parameter kedua dari metode replaceOne.
Perilaku Pembaharuan
Atomisitas
Semua operasi tulis dalam MongoDB bersifat atomik pada tingkat dokumen individual.
Kolom _id
Kolom _id bersifat tidak berubah dan tidak dapat diperbarui.