MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

MongoDB mengganti nama bidang basis data dalam array

Untuk apa nilainya, meskipun kedengarannya mengerikan untuk dilakukan, solusinya sebenarnya cukup mudah. Ini tentu saja tergantung pada berapa banyak catatan yang Anda miliki. Tapi inilah contoh saya:

db.Setting.find({ 'Value.Tiers.0.AssetsUnderManagement': { $exists: 1 } }).snapshot().forEach(function(item)
{    
    for(i = 0; i != item.Value.Tiers.length; ++i)
    {
        item.Value.Tiers[i].Aum = item.Value.Tiers[i].AssetsUnderManagement;
        delete item.Value.Tiers[i].AssetsUnderManagement;
    }
    
    db.Setting.update({_id: item._id}, item);
});

Saya mengulangi koleksi saya di mana array ditemukan dan nama "salah" ditemukan. Saya kemudian mengulangi sub koleksi, mengatur nilai baru, menghapus yang lama, dan memperbarui seluruh dokumen. Itu relatif tidak menyakitkan. Memang saya hanya memiliki beberapa puluh ribu baris untuk ditelusuri, dan hanya beberapa lusin yang memenuhi kriteria.

Namun, saya harap jawaban ini membantu seseorang!

Sunting:Menambahkan snapshot() ke kueri. Lihat alasannya di komentar.

Anda harus menerapkan snapshot() ke kursor sebelum mengambil dokumen apa pun dari database. Anda hanya dapat menggunakan snapshot() dengan koleksi yang tidak di-shard.

Dari MongoDB 3.4, snapshot() fungsi telah dihapus. Jadi jika menggunakan Mongo 3.4+, contoh di atas harus menghapus snapshot() fungsi.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana Menguji Peningkatan Aplikasi MongoDB Anda?

  2. Cara Menghapus Bidang dari Dokumen MongoDB ($ tidak disetel)

  3. Bagaimana cara mendapatkan Skema database luwak yang didefinisikan dalam model lain

  4. Menggunakan UUID alih-alih ObjectID di MongoDB

  5. Bagaimana cara mengaktifkan otentikasi di MongoDB melalui Docker?