Berususan dengan banyak data memang merepotkan. Tapi ya gimana lagi, haha.
Kasus
Saya ada 500000 document dalam sebuah collection mongodb. Data tersebut memiliki format:
{
"_id" : ObjectId("5c81cb961555687199b64caa"),
"name" : "Sumarsono",
"no" : "001-963258741",
"create_date" : ISODate("2019-03-08T08:55:34.605Z"),
"update_date" : ISODate("2019-03-08T08:55:34.605Z")
}
Dari data tersebut, saya ingin membuang 001-
dari field no
dan menyisakan angka setelah 001-
. Edit satu-satu? jangan bercanda, ada 500ribu data.
Cara tercepat adalah dengan memanfaatkan fungsi yang ada di mongo shell. Hasil akhir yang ingin dicapai adalah:
{
"_id" : ObjectId("5c81cb961555687199b64caa"),
"name" : "Sumarsono",
"no" : "963258741",
"create_date" : ISODate("2019-03-08T08:55:34.605Z"),
"update_date" : ISODate("2019-03-08T08:55:34.605Z")
}
Struktur database:
- nama db : mydb
- nama collection: my_collection
Solusi
masuk ke mongo shell dengan command mongo
, kemudian eksekusi command berikut:
> use mydb
> db.getCollection('my_collection').find().forEach(function(doc) {
doc.no = doc.no.replace('001-', '');
db.getCollection('my_collection').save(doc);
});
Atau lewat Aplikasi Robo3T, cukup dobel klik my_collection
, kemudian pada bar command paste:
db.getCollection('my_collection').find().forEach(function(doc) {
doc.no = doc.no.replace('001-', '');
db.getCollection('my_collection').save(doc);
});
Kemudian tekan CTRL+ENTER
Cara ini cukup cepat, dari pengalamanku untuk 500 ribu data, tidak ada 3 menit.
Note: Jangan lupa selalu backup sebelum eksekusi sesuatu