Saya ingin memperbarui _id
bidang satu dokumen. Saya tahu ini bukan praktik yang sangat baik. Tetapi dengan beberapa alasan teknis, saya perlu memperbaruinya. Jika saya mencoba memperbaruinya saya mendapatkan:
> db.clients.update({ _id: ObjectId("123")}, { $set: { _id: ObjectId("456")}})
Performing an update on the path '_id' would modify the immutable field '_id'
Dan pembaruan tidak dilakukan. Bagaimana saya bisa memperbaruinya?
duplicate key error
jawabaninsert
dan tidak khawatir dengan masalah @skelly yang disebutkan, solusi paling sederhana adalah dengan meneleponremove
terlebih dahulu dan kemudian meneleponinsert
. Thedoc
harus sudah dicetak pada layar Anda sehingga akan mudah untuk pulih, kasus terburuk, bahkan jika insert gagal, untuk dokumen sederhana.Untuk melakukannya untuk seluruh koleksi Anda, Anda juga dapat menggunakan loop (berdasarkan contoh Niels):
Dalam hal ini, UserId adalah ID baru yang ingin saya gunakan
sumber
list()
adalah yang logis, tetapi untuk database besar ini dapat menguras memoriJika Anda ingin mengganti nama _id dalam koleksi yang sama (misalnya, jika Anda ingin awalan beberapa _id):
if (doc._id.indexOf ("2019:")! = 0) {... diperlukan untuk mencegah infinite loop, karena forEach memilih docs yang dimasukkan, bahkan metode .snapshot () yang digunakan.
sumber
find(...).snapshot is not a function
tapi selain itu, solusi bagus. Juga, jika Anda ingin mengganti_id
dengan id khusus Anda, Anda dapat memeriksa apakahdoc._id.toString().length === 24
untuk mencegah loop tak terbatas (dengan asumsi ID kustom Anda juga tidak sepanjang 24 karakter ),Di sini saya memiliki solusi yang menghindari beberapa permintaan, untuk loop dan penghapusan dokumen lama.
Anda dapat dengan mudah membuat ide baru secara manual menggunakan sesuatu seperti:
_id:ObjectId()
Tapi mengetahui Mongo akan secara otomatis menetapkan _id jika hilang, Anda dapat menggunakan agregat untuk membuat yang$project
berisi semua bidang dokumen Anda, tetapi hilangkan bidang _id. Anda kemudian dapat menyimpannya dengan$out
Jadi jika dokumen Anda adalah:
Maka permintaan Anda akan:
sumber
_id
yang diberikan, daripada membiarkan MongoDB menghasilkan yang lain.Anda juga dapat membuat dokumen baru dari kompas MongoDB atau menggunakan perintah dan mengatur
specific _id
nilai yang Anda inginkan.sumber