


Bagaimana untuk mengemas kini berbilang rekod dalam satu pertanyaan berdasarkan kunci berbeza dalam Mongo?
Apabila menggunakan MongoDB, kadangkala kita perlu mengemas kini berbilang rekod berdasarkan kekunci yang berbeza, dan masalah ini boleh mengelirukan. Walau bagaimanapun, mujurlah dalam MongoDB, kami boleh menggunakan operasi Tulis Pukal untuk mencapai matlamat ini. Tulis Pukal ialah operasi tulis pukal yang boleh melakukan pelbagai operasi kemas kini, sisipan atau pemadaman dalam satu operasi. Dalam artikel ini, saya akan memperkenalkan anda cara menggunakan Tulis Pukal untuk mengemas kini berbilang rekod berdasarkan kekunci berbeza dalam Mongo.
Kandungan soalan
Jika saya mempunyai sesuatu yang serupa dengan yang berikut...
collection.insertmany(context.todo(), []interface{}{ bson.m{ "_id" : 1, "member" : "abc123", "status" : "p" }, bson.m{ "_id" : 2, "member" : "xyz123", "status" : "a" }, bson.m{ "_id" : 3, "member" : "lmn123", "status" : "p" }, bson.m{ "_id" : 4, "member" : "pqr123", "status" : "d" }, bson.m{ "_id" : 5, "member" : "ijk123", "status" : "p" }, bson.m{ "_id" : 6, "member" : "cde123", "status" : "a" }, } )
Adakah mungkin untuk menggunakan kemas kini berikut dalam pertanyaan sisipan banyak?
[{"_id" : "1", "status" : "P0-A0"}, {"_id" : "2", "status" : "P0-A1"}, {"_id" : "3", "status" : "P0-A2"}, {"_id" : "4", "status" : "P0-A3"}, {"_id" : "5", "status" : "P0-A4"}, {"_id" : "6", "status" : "P0-A5"}]
Jika ya, bagaimanakah ia boleh dicapai menggunakan golang?
Secara khusus, apa yang akan berlaku jika anda menggunakan collection.updatemany(context.todo(), filter, update)
,我的 filter
和 update
?
Terima kasih atas bantuan anda.
Penyelesaian
Anda tidak boleh melakukan ini dengan satu collection.updatemany()
调用,因为您无法对不同的匹配文档应用不同的更新文档。您必须多次调用 collection.updatemany()
, satu untuk setiap dokumen kemas kini yang berbeza.
Jika anda ingin melakukan ini dengan cekap dengan satu panggilan, anda boleh menggunakan collection.bulkwrite()
。您必须准备一个不同的 mongo.writemodel
Kemas kini setiap dokumen.
Ia mungkin kelihatan seperti ini:
wm := []mongo.writemodel{ mongo.newupdateonemodel().setfilter(bson.m{"_id": "1"}).setupdate(bson.m{"$set": bson.m{"status": "p0-a0"}}), mongo.newupdateonemodel().setfilter(bson.m{"_id": "2"}).setupdate(bson.m{"$set": bson.m{"status": "p0-a1"}}), mongo.newupdateonemodel().setfilter(bson.m{"_id": "3"}).setupdate(bson.m{"$set": bson.m{"status": "p0-a2"}}), mongo.newupdateonemodel().setfilter(bson.m{"_id": "4"}).setupdate(bson.m{"$set": bson.m{"status": "p0-a3"}}), mongo.newupdateonemodel().setfilter(bson.m{"_id": "5"}).setupdate(bson.m{"$set": bson.m{"status": "p0-a4"}}), mongo.newupdateonemodel().setfilter(bson.m{"_id": "6"}).setupdate(bson.m{"$set": bson.m{"status": "p0-a5"}}), }
Terlalu banyak "pengulangan" dalam kepingan literal di atas, anda boleh menangkapnya menggunakan fungsi pembantu:
create := func(id, newstatus string) *mongo.updateonemodel { return mongo.newupdateonemodel(). setfilter(bson.m{"_id": id}). setupdate(bson.m{"$set": bson.m{"status": newstatus}}) } wm := []mongo.writemodel{ create("1", "p0-a0"), create("2", "p0-a1"), create("3", "p0-a2"), create("4", "p0-a3"), create("5", "p0-a4"), create("6", "p0-a5"), }
Selain itu, jika terdapat logik dalam kemas kini yang boleh ditakrifkan dengan mudah, gunakan gelung dan bukannya menyenaraikan semua elemen:
var wm []mongo.writemodel for i := 1; i <= 6; i++ { newstatus := fmt.sprintf("p0-a%d", i-1) wm = append(wm, mongo.newupdateonemodel(). setfilter(bson.m{"_id": strconv.itoa(i)}). setupdate(bson.m{"$set": bson.m{"status": newstatus}}), ) }
Anda boleh melakukan semua kemas kini dengan satu panggilan seperti ini:
res, err := coll.BulkWrite(ctx, wm)
Lihat kandungan berkaitan: mongodb kemas kini tatasusunan dokumen dan gantikan dengan ganti tatasusunan dokumen
Atas ialah kandungan terperinci Bagaimana untuk mengemas kini berbilang rekod dalam satu pertanyaan berdasarkan kunci berbeza dalam Mongo?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas





Ya, pengeluaran halaman H5 adalah kaedah pelaksanaan penting untuk pembangunan front-end, yang melibatkan teknologi teras seperti HTML, CSS dan JavaScript. Pemaju membina halaman H5 yang dinamik dan berkuasa dengan bijak menggabungkan teknologi ini, seperti menggunakan & lt; kanvas & gt; Tag untuk menarik grafik atau menggunakan JavaScript untuk mengawal tingkah laku interaksi.

Kaedah penyesuaian simbol saiz semula dalam CSS bersatu dengan warna latar belakang. Dalam perkembangan harian, kita sering menghadapi situasi di mana kita perlu menyesuaikan butiran antara muka pengguna, seperti menyesuaikan ...

Harga USD Bitcoin masa nyata Faktor yang menjejaskan harga bitcoin Petunjuk untuk meramalkan harga bitcoin masa depan Berikut adalah beberapa maklumat penting mengenai harga Bitcoin pada 2018-2024:

Mengenai sebab-sebab dan penyelesaian untuk memaparkan unsur-unsur blok sebaris. Apabila menulis susun atur laman web, kami sering menghadapi masalah paparan yang kelihatan aneh. Bandingkan ...

Cara menggunakan JavaScript atau CSS untuk mengawal bahagian atas dan akhir halaman dalam tetapan percetakan penyemak imbas. Dalam tetapan percetakan penyemak imbas, ada pilihan untuk mengawal sama ada paparan ...

Bagaimana untuk mencapai kesan lengkung 45 darjah segmen? Dalam proses melaksanakan segmen, bagaimana membuat sempadan yang betul berubah menjadi lengkung 45 darjah ketika mengklik butang kiri, dan titik ...

Petua untuk melaksanakan kesan segmen dalam reka bentuk antara muka pengguna, Segmenter adalah elemen navigasi biasa, terutamanya dalam aplikasi mudah alih dan laman web responsif. …

Masalah pembukaan kontena kerana peninggalan teks yang berlebihan di bawah susun atur flex dan penyelesaian digunakan ...
