Bab ini memperkenalkan cara memperbarui data dokumen di Golang MongoDB.
Fungsi Update yang Didukung oleh MongoDB
- Collection.UpdateOne - Memperbarui satu buah data
- Collection.UpdateMany - Memperbarui data secara bertahap
- Collection.ReplaceOne - Mengganti data
Persiapkan Data Uji
Masukkan sekelompok data ke dalam koleksi coll
docs := []interface{}{
bson.D{
{"item", "canvas"},
{"qty", 100},
{"size", bson.D{
{"h", 28},
{"w", 35.5},
{"uom", "cm"},
}},
{"status", "A"},
},
bson.D{
{"item", "journal"},
{"qty", 25},
{"size", bson.D{
{"h", 14},
{"w", 21},
{"uom", "cm"},
}},
{"status", "A"},
},
// (bagian data lainnya dipotong untuk kejelasan)
}
result, err := coll.InsertMany(context.Background(), docs)
Perbarui Dokumen
result, err := coll.UpdateOne(
context.Background(), // Dapatkan parameter konteks
bson.D{ // Tetapkan kriteria pencarian untuk menemukan dokumen dengan item=paper
{"item", "paper"},
},
bson.D{ // Tetapkan ekspresi pembaruan
{"$set", bson.D{ // Gunakan operator $set untuk menetapkan konten field yang diperbarui
{"size.uom", "cm"}, // Ubah nilai dari size.uom menjadi cm
{"status", "P"}, // Ubah nilai dari status menjadi P
}},
{"$currentDate", bson.D{ // Gunakan operator $currentDate untuk memperbarui nilai field lastModified menjadi waktu saat ini
{"lastModified", true},
}},
},
)
Cocokkan dokumen berdasarkan kriteria query, dan kemudian perbarui konten dari dokumen ini.
Tips: Jika Anda tidak terbiasa dengan MongoDB, harap baca Panduan MongoDB.
Memperbarui Dokumen Secara Massal
Perbedaan dari fungsi UpdateOne adalah bahwa UpdateMany memperbarui dokumen yang cocok secara massal berdasarkan kriteria pencocokan.
hasil, err := coll.UpdateMany(
context.Background(),
bson.D{ // Tetapkan kriteria pencarian, qty > 50
{"qty", bson.D{
{"$lt", 50},
}},
},
bson.D{ // Tetapkan konten pembaruan
{"$set", bson.D{
{"size.uom", "cm"},
{"status", "P"},
}},
{"$currentDate", bson.D{
{"lastModified", true},
}},
},
)
Menggantikan Sebuah Dokumen
Menggunakan kriteria pencarian tertentu untuk melakukan pencarian dokumen dan menggantikan konten dokumen dengan konten yang telah ditentukan.
Tip: Menggantikan sebuah dokumen mengacu pada penggantian keseluruhan, bukan pembaruan parsial dari nilai-nilai tertentu di dalam dokumen.
hasil, err := coll.ReplaceOne(
context.Background(),
bson.D{ // Tetapkan kriteria pencarian, item=kertas
{"item", "kertas"},
},
bson.D{ // Tetapkan konten dokumen baru
{"item", "kertas"},
{"instock", bson.A{
bson.D{
{"gudang", "A"},
{"qty", 60},
},
bson.D{
{"gudang", "B"},
{"qty", 40},
},
}},
},
)
Pertama, berdasarkan kriteria pencarian, temukan dokumen dengan item=kertas, kemudian gantikan dengan konten dokumen baru.