sumarsono.com
Take it with a grain of salt


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:

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