Replace String dalam Mongodb Field
Posted on
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