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 menggunakansnapshot()
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.