Replace String dalam Mongodb Field

Berususan dengan banyak data memang merepotkan. Tapi ya gimana lagi, haha.

Kasus

Saya ada 500000 document dalam sebuah collection mongodb. Data tersebut memiliki format:

1
2
3
4
5
6
7
{
    "_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:

1
2
3
4
5
6
7
{
    "_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:

1
2
3
4
5
> 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:

1
2
3
4
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