Anda benar-benar ingin bulkWrite()
menggunakan dua "updateMany"
pernyataan di dalamnya sebagai gantinya. Ekspresi agregasi tidak dapat digunakan untuk melakukan "pilihan alternatif" dalam bentuk pernyataan pembaruan apa pun.
db.country.bulkWrite([
{ "updateMany": {
"filter": { "pop": { "$lt": 20000000 } },
"update": { "$set": { "country": "Small Country" } }
}},
{ "updateMany": {
"filter": { "pop": { "$gt": 20000000 } },
"update": { "$set": { "country": "Large Country" } }
}}
])
Masih ada "permintaan fitur" yang belum terselesaikan di SERVER-6566 untuk "sintaks bersyarat", tetapi ini belum diselesaikan. API "massal" sebenarnya diperkenalkan setelah permintaan ini diajukan, dan benar-benar dapat diadaptasi seperti yang ditunjukkan untuk melakukan kurang lebih hal yang sama.
Juga menggunakan $out
dalam pernyataan agregasi seperti yang disarankan bukan merupakan opsi untuk "memperbarui" dan hanya dapat menulis ke "koleksi baru" saat ini. Perubahan yang dijadwalkan dari MongoDB 4.2 dan seterusnya akan memungkinkan $out
untuk benar-benar "memperbarui" koleksi yang ada, namun ini hanya akan terjadi di mana koleksi yang akan diperbarui berbeda dari koleksi lain yang digunakan dalam pengumpulan data dari pipa agregasi. Jadi tidak mungkin untuk menggunakan alur agregasi untuk memperbarui yang sama koleksi seperti yang Anda baca.
Singkatnya, gunakan bulkWrite()
.