全部产品
Search
文档中心

:Perubahan kompatibilitas di MongoDB 4.2

更新时间:Jun 27, 2025

Topik ini menjelaskan perubahan kompatibilitas di MongoDB 4.2.

Untuk melihat dokumentasi resmi perubahan kompatibilitas MongoDB, kunjungi Dokumentasi Warisan.

Penghapusan mesin penyimpanan MMAPv1

MongoDB 4.2 menghapus dukungan untuk mesin penyimpanan MMAPv1.

Jika menggunakan mesin penyimpanan MMAPv1 di MongoDB 4.0, Anda harus beralih ke mesin penyimpanan WiredTiger sebelum meningkatkan instance Anda ke MongoDB 4.2.

Opsi spesifik MMAPv1

MongoDB 4.2 menghapus opsi-opsi berikut yang spesifik untuk MMAPv1:

Opsi yang dihapus

Baris perintah yang dihapus

storage.mmapv1.journal.commitIntervalMs

storage.mmapv1.journal.debugFlags

mongod --journalOptions

storage.mmapv1.nsSize

mongod --nssize

storage.mmapv1.preallocDataFiles

mongod --noprealloc

storage.mmapv1.quota.enforced

mongod --quota

storage.mmapv1.quota.maxFilesPerDB

mongod --quotaFiles

storage.mmapv1.smallFiles

mongod --smallfiles

storage.repairPath

mongod --repairpath

replication.secondaryIndexPrefetch

mongod --replIndexPrefetch

Catatan

Mulai dari MongoDB 4.2, MongoDB mendepreciasi opsi dan baris perintah sebelumnya. Jika menggunakan WiredTiger, hapus opsi yang spesifik untuk MMAPv1.

Parameter spesifik MMAPv1

MongoDB 4.2 menghapus parameter-parameter berikut yang spesifik untuk MMAPv1:

  • newCollectionsUsePowerOf2Sizes

  • replIndexPrefetch

Perintah spesifik MMAPv1

MongoDB 4.2 menghapus perintah spesifik MMAPv1 touch.

Opsi spesifik MMAPv1 untuk perintah dan metode

MongoDB 4.2 menghapus opsi spesifik MMAPv1 berikut:

  • noPadding dan usePowerOf2Sizes dari perintah collMod.

  • verbose dari perintah collStats.

  • flags dari perintah create.

  • paddingFactor, paddingBytes, dan preservePadding dari perintah db.createCollection().

MongoDB 4.2 mengabaikan opsi spesifik MMAPv1 async dari perintah fsync.

Penghapusan atau depreciasi perintah dan metode

Depreciasi perintah group

Mulai dari MongoDB 4.2, perintah group (yang sudah didepreciasi sejak MongoDB 3.4) dan fungsi pembantu mongo shell-nya db.collection.group() telah sepenuhnya didepreciasi.

Gunakan db.collection.aggregate() bersama dengan tahap $group sebagai gantinya.

Depreciasi perintah eval

Mulai MongoDB 4.2, perintah eval telah didepreciasi (sebelumnya juga sudah didepreciasi di MongoDB 3.0).

Fungsi pembantu mongo shell db.eval() dan db.collection.copyTo() hanya dapat dijalankan ketika terhubung ke instance yang menjalankan MongoDB 4.0 atau versi sebelumnya.

Depreciasi perintah copydb dan clone

Mulai MongoDB 4.2, perintah copydb dan clone telah didepreciasi. Fungsi pembantu mongo shell db.copyDatabase() dan db.cloneDatabase() hanya dapat dijalankan saat terhubung ke instance yang menjalankan MongoDB 4.0 atau versi sebelumnya.

Sebagai alternatif, gunakan mongodump dan mongorestore (bersama dengan opsi --nsFrom dan --nsTo) atau driver untuk menulis skrip.

Sebagai contoh, untuk menyalin database test ke database examples pada instance yang sama, lakukan langkah-langkah berikut:

  1. Gunakan mongodump untuk mengekspor database test ke file arsip bernama mongodump-test-db.

    mongodump --archive="mongodump-test-db" --db=test
  2. Gunakan mongorestore bersama dengan parameter --nsFrom dan --nsTo untuk memulihkan data dari file arsip.

    mongorestore --archive="mongodump-test-db" --nsFrom='test.*' --nsTo='examples.*'
Catatan

Anda dapat menambahkan parameter sesuai kebutuhan, seperti --uri, --host, --username.

Alternatif lainnya, alih-alih menggunakan file arsip, gunakan mongodump untuk mengekspor database test ke aliran keluaran standar dan kemudian pipa ke mongorestore.

mongodump --archive --db=test | mongorestore --archive  --nsFrom='test.*' --nsTo='examples.*'

Depreciasi perintah parallelCollectionScan

Mulai dari MongoDB 4.2, MongoDB mendepreciasi perintah parallelCollectionScan.

Penghapusan opsi maxScan

Mulai dari MongoDB 4.2, MongoDB menghapus opsi maxScan dari perintah find dan fungsi pembantu mongo shell cursor.maxScan(). Gunakan opsi maxTimeMS dari perintah find atau metode mongo shell cursor.maxTimeMS() sebagai gantinya.

Depreciasi perintah geoNear

Mulai MongoDB 4.2, perintah geoNear telah didepreciasi. Sebagai gantinya, gunakan tahap agregasi $geoNear.

Untuk tahap $geoNear, opsi-opsinya serupa dengan perintah geoNear yang telah didepreciasi, dengan pengecualian sebagai berikut:

  • Keluaran dari perintah geoNear yang sudah didepreciasi mencakup bidang dis yang berisi informasi jarak.

    Untuk tahap $geoNear, tentukan nama bidang jarak di distanceField.

  • Perintah geoNear yang sudah didepreciasi menerima nilai boolean untuk opsi includeLocs untuk menyertakan bidang loc.

    Untuk tahap $geoNear, tentukan nama bidang lokasi di includeLocs.

  • Keluaran dari perintah geoNear yang sudah didepreciasi mencakup avgDistance dan maxDistance.

    Anda dapat menggunakan pipeline agregasi untuk mengembalikan avgDistance dan maxDistance. Secara khusus, sertakan tahap group untuk menghitung avgDistance dan maxDistance setelah tahap geoNear.

    db.places.aggregate([
       { $geoNear: { near: <...>, distanceField: "dis", includeLocs: "loc", spherical: true, ... } },
       { $group: { _id: null, objectsLoaded: { $sum: 1 }, maxDistance:
             { $max: "$dis" }, avgDistance: { $avg: "$dis" } } }
    
    ])

Depreciasi perintah repairDatabase

Mulai MongoDB 4.2, MongoDB mendepreciasi perintah repairDatabase, fungsi pembantu mongo shell db.repairDatabase(), dan izin repairDatabase.

Alternatif:

  • Untuk menekan data pada mongod, gunakan perintah compact.

  • Untuk membangun ulang indeks pada instance mandiri, gunakan perintah reIndex atau fungsi pembantunya db.collection.reIndex().

  • Untuk memulihkan data untuk instance mandiri, gunakan mongod --repair.

Depreciasi perintah getPrevError

Mulai dari MongoDB 4.2, MongoDB mendepreciasi perintah getPrevError dan fungsi pembantu mongo shell-nya db.getPrevError().

Depreciasi perintah cloneCollection

Mulai MongoDB 4.2, perintah cloneCollection dan fungsi pembantu mongo shell-nya db.cloneCollection() telah didepreciasi.

Sebagai alternatif, gunakan perintah mongoexport dan mongoimport atau driver untuk menulis skrip.

Depreciasi perintah PlanCache

Mulai dari MongoDB 4.2, MongoDB mendepreciasi item-item berikut:

  • Metode PlanCache.getPlansByQuery() dan perintah planCacheListPlans.

    Untuk mendapatkan rencana query yang tersimpan dalam cache untuk suatu bentuk, gunakan tahap agregasi $planCacheStats.

  • Metode PlanCache.listQueryShapes() dan perintah planCacheListQueryShapes.

    Untuk menampilkan bentuk query yang tersimpan dalam cache, gunakan tahap agregasi $planCacheStats.

Agregasi

Batasan tahap $out

$out dan tampilan

Pipeline definisi tampilan tidak dapat berisi tahap $out. Jika Anda memiliki tampilan yang ada yang berisi tahap $out, Anda tidak dapat membuat tampilan lain dari tampilan yang ada.

Untuk tampilan yang ada yang berisi tahap $out, Anda dapat menghapus dan membuat ulang tampilan tanpa tahap $out atau mengganti definisi tampilan dengan pipeline baru yang tidak berisi tahap $out.

$out dan $lookup

Tahap $lookup tidak dapat menyertakan tahap $out di bidang bersarangnya.

$out dan tingkat read concern

Tahap $out tidak dapat digunakan bersamaan dengan tingkat read concern "linearizable".

$out dan perintah explain

Jika pipeline agregasi saat ini mencakup tahap $out, Anda tidak dapat menjalankan fungsi pembantu mongo shell db.collection.explain() atau perintah explain dalam mode executionStats atau allPlansExecution.

Jika pipeline agregasi saat ini mencakup tahap $out, untuk melihat informasi executionStats atau allPlansExecution, jalankan explain tanpa tahap out agar keluaran explain mencakup tahap sebelumnya.

Sebagai alternatif, Anda dapat menjalankan explain dalam mode queryPlanner pada pipeline agregasi yang mencakup tahap $out.

$out dan tingkat read concern "majority "

Mulai dari MongoDB 4.2, Anda dapat menentukan tingkat read concern "majority" untuk operasi agregasi yang berisi tahap $out.

Penghapusan opsi limit dan num dari $geoNear

Mulai dari MongoDB 4.2, MongoDB menghapus opsi limit dan num dari $geoNear, bersama dengan batas default 100 dokumen. Untuk membatasi hasil dari $geoNear, gunakan tahap $geoNear dengan tahap $limit.

Sebagai contoh, sampel agregasi berikut di mana tahap $geoNear mencakup opsi num tidak lagi valid di MongoDB 4.2.

db.places.aggregate([
   {
     $geoNear: {
        near: { type: "Point", coordinates: [ -73.99279 , 40.719296 ] },
        distanceField: "distance",
        num: 5,                 // Tidak didukung di 4.2
        spherical: true
     }
   }
])

Sebagai gantinya, Anda dapat menulis ulang perintah agregasi dalam format berikut.

db.places.aggregate([
   {
     $geoNear: {
        near: { type: "Point", coordinates: [ -73.99279 , 40.719296 ] },
        distanceField: "distance",
        spherical: true
     }
   },
   { $limit: 5 }
])

Transaksi

Mulai dari MongoDB 4.2:

  • Anda tidak dapat menentukan killCursors sebagai operasi pertama dalam transaksi, atau menulis data ke koleksi capped dalam transaksi. Namun, Anda masih dapat membaca data dari koleksi capped dalam transaksi.

  • MongoDB menghapus batas ukuran total transaksi sebesar 16 MB. MongoDB 4.2 membuat entri oplog sebanyak yang diperlukan untuk mengenkapsulasi semua operasi tulis dalam transaksi. Versi sebelumnya membuat satu entri untuk semua operasi tulis dalam transaksi, sehingga menentukan batas ukuran total transaksi sebesar 16 MB.

Change streams

Ketersediaan

Mulai MongoDB 4.2, change streams tersedia tanpa bergantung pada dukungan tingkat read concern "majority".

Sebelum MongoDB 4.2, change streams hanya tersedia jika dukungan untuk tingkat read concern "majority" diaktifkan (secara default).

Collation default

Mulai dari MongoDB 4.2, change streams menggunakan perbandingan biner sederhana kecuali collation eksplisit disediakan. Sebelum MongoDB 4.2, change streams yang dibuat untuk koleksi tunggal db.collection.watch() mewarisi collation default dari koleksi.

Modifikasi resume token

Mulai dari MongoDB 4.2, jika pipeline agregasi change stream memodifikasi bidang _id dari suatu event, change streams melemparkan pengecualian.

Penambahan deskriptor file yang diperlukan untuk koneksi masuk

Mulai MongoDB 4.2, setiap koneksi masuk ke instance mongod atau mongos memerlukan dua deskriptor file, sedangkan sebelum MongoDB 4.2, hanya satu deskriptor file yang diperlukan.

Sebelum meningkatkan dari MongoDB 4.0 ke 4.2, Anda mungkin perlu menambahkan nilai pengaturan open files ulimit (-n).

Alat MongoDB

Mode FIPS

Mulai dari MongoDB 4.2, MongoDB menghapus opsi --sslFIPSMode dari program-program berikut:

  • mongodump

  • mongoexport

  • mongofiles

  • mongoimport

  • mongorestore

  • mongostat

  • mongotop

Program-program sebelumnya menggunakan koneksi yang sesuai dengan FIPS ketika mode FIPS diaktifkan di instance mongod dan mongos.

Extended JSON v2

Alat

Deskripsi

bsondump

Menggunakan format Extended JSON v2.0 (Canonical Mode).

mongodump

Menggunakan format Extended JSON v2.0 (Canonical Mode) untuk output metadata. Memerlukan mongorestore V4.2 atau lebih tinggi untuk mendukung format Extended JSON v2.0 (Canonical atau Relaxed Mode).

Catatan

Secara umum, gunakan versi mongodump dan mongorestore yang sesuai. Untuk memulihkan file data yang dibuat oleh versi tertentu mongodump, gunakan versi mongorestore yang sesuai.

mongoexport

Menghasilkan data keluaran dalam format Extended JSON v2.0 (Relaxed Mode) secara default.

Jika --jsonFormat diatur ke canonical, mongoexport menghasilkan data keluaran dalam format Extended JSON v2.0 (Canonical Mode).

mongoimport

Mengharapkan data impor dalam format Extended JSON v2.0 (Canonical atau Relaxed Mode) secara default.

Jika opsi --legacy ditentukan, mongoimport dapat mengenali data dalam format Extended JSON v1.0.

Catatan

Secara umum, versi mongoexport dan mongoimport harus konsisten. Untuk mengimpor data yang dibuat oleh mongoexport, gunakan versi mongoimport yang sesuai.

--query opsi

Mulai dari MongoDB 4.2, opsi --query untuk mongodump dan mongoexport harus dalam format Extended JSON v2 (Relaxed atau Strict Mode), termasuk mengapit nama bidang dan operator dalam tanda kutip. Contoh:

mongoexport -d=test -c=records -q='{ "a": { "$gte": 3 }, "date": { "$lt": { "$date": "2016-01-01T00:00:00.000Z" } } }' --out=exportdir/myRecords.json

Sebelum MongoDB 4.2, opsi --query menggunakan format Extended JSON v1 di mana nama bidang dan operator tidak perlu diapit dalam tanda kutip.

mongoexport -d=test -c=records -q='{ a: { $gte: 3 }, date: { $lt: { "$date": "2016-01-01T00:00:00.000Z" } } }' --out=exportdir/myRecords.json

Perubahan status set replika

Langkah turun Primary

Mulai dari MongoDB 4.2, replSetStepDown (atau replSetReconfig yang menyebabkan langkah turun) tidak lagi menutup semua koneksi klien. Namun, tulisan yang masih berlangsung akan dihentikan.

Sebelum MongoDB 4.0, replSetStepDown menutup semua koneksi klien selama langkah turun.

Status ROLLBACK

Mulai dari MongoDB 4.2, MongoDB menghentikan semua operasi pengguna ketika anggota memasuki status ROLLBACK.

Tulisan yang dapat diulang diaktifkan secara default di driver MongoDB 4.2-compatible

Mulai MongoDB 3.6, MongoDB mendukung tulisan yang dapat diulang. Namun, sebagian besar driver MongoDB versi 3.6 dan 4.0-compatible secara default menonaktifkan fitur ini. Untuk driver-driver tersebut, tulisan yang dapat diulang dapat diaktifkan dengan menambahkan opsi retryWrites=true dalam string koneksi.

Driver MongoDB 4.2 dan versi kompatibel yang lebih baru mengaktifkan tulisan yang dapat diulang secara default. Aplikasi yang diperbarui ke driver MongoDB 4.2 atau yang kompatibel, yang memerlukan tulisan yang dapat diulang, dapat menghilangkan opsi retryWrites=true. Untuk menonaktifkan tulisan yang dapat diulang, sertakan opsi retryWrites=false dalam string koneksi.

Catatan

Database local tidak mendukung tulisan yang dapat diulang. Aplikasi yang menulis data ke database local akan mengalami kesalahan tulis setelah ditingkatkan ke driver MongoDB 4.2-compatible kecuali tulisan yang dapat diulang dinonaktifkan secara eksplisit.

Perubahan umum

Indeks

Batasan pada perintah reIndex

Mulai dari MongoDB 4.2, MongoDB memberlakukan batasan yang lebih ketat pada perintah reIndex atau fungsi db.collection.reIndex() untuk melarang reIndex dan db.collection.reIndex() pada mongos.

Batasan pada db.collection.dropIndex()

Anda tidak dapat menggunakan <a href="https://www.mongodb.com/docs/manual/reference/method/db.collection.dropIndex/" id="ecbc25a150hf1">db.collection.dropIndex()</a> untuk menghapus semua indeks non-_id. Gunakan db.collection.dropIndexes() sebagai gantinya.

Pesan kesalahan untuk pembuatan indeks duplikat

Mulai dari MongoDB 4.2, perintah createIndexes dan fungsi pembantu mongo shell db.collection.createIndex() dan db.collection.createIndexes() mengembalikan kesalahan jika Anda membuat indeks dengan satu nama dan kemudian mencoba membuat indeks yang sama lagi dengan nama lain.

{
   "ok" : 0,
   "errmsg" : "Indeks dengan nama: x_1 sudah ada dengan nama berbeda",
   "code" : 85,
   "codeName" : "IndexOptionsConflict"
}

Jika Anda melakukan operasi ini di MongoDB 4.0 dan versi sebelumnya, MongoDB tidak akan membuat indeks lagi tetapi tetap mengembalikan pesan yang mencakup informasi berikut.

{
   "numIndexesBefore" : 2,
   "numIndexesAfter" : 2,
   "note" : "semua indeks sudah ada",
   "ok" : 1
}

Indeks hash pada PowerPC

Untuk indeks hash, MongoDB 4.2 memastikan bahwa nilai hash dari nilai floating-point 263 pada PowerPC konsisten dengan platform lainnya. Sebelum MongoDB 4.2, nilai hash untuk nilai floating-point 263 pada PowerPC tidak konsisten dengan platform lainnya.

Walaupun indeks hash pada bidang dengan nilai floating-point lebih besar dari 253 adalah pengaturan yang tidak didukung, klien masih dapat menyisipkan dokumen di mana bidang terindeks memiliki nilai 263.

Jika instance kluster sharded yang menjalankan MongoDB 4.0 pada PowerPC memiliki kunci shard dengan nilai hash 263, langkah tambahan perlu dipertimbangkan sebelum melakukan peningkatan ke MongoDB 4.2.

min()/max()

Mulai MongoDB 4.2, saat menentukan min()/max() untuk operasi db.collection.find(), Anda harus secara eksplisit menentukan indeks untuk min()/max(), kecuali query find() merupakan kondisi kesetaraan pada bidang _id { _id: }.

Demikian pula, saat menentukan min/max dalam perintah find, Anda harus secara eksplisit menentukan petunjuk untuk indeks min/max.

Sebelum MongoDB 4.0, Anda dapat memilih untuk secara eksplisit menentukan indeks min()/max() tanpa bergantung pada kondisi query. Jika Anda tidak menentukan petunjuk secara eksplisit di MongoDB 4.0 dan versi sebelumnya, MongoDB akan memilih indeks berdasarkan batas indeks. Namun, jika terdapat beberapa indeks pada bidang yang sama dengan urutan pengurutan berbeda, pemilihan indeks bisa menjadi ambigu.

CurrentOp

Saat melaporkan operasi "getmore", tahap agregasi $currentOp, perintah currentOp, dan db.currentOp() sekarang mengembalikan bidang originatingCommand sebagai bidang bersarang dari bidang baru cursor. Sebelum MongoDB 4.2, originatingCommand adalah bidang tingkat atas dalam dokumen "getmore".

Status server

Metrik opcounters dan opcountersRepl yang dikembalikan oleh serverStatus dan db.serverStatus sekarang adalah bilangan bulat 64-bit (NumberLong) alih-alih bilangan bulat 32-bit (NumberInt).

Pencatatan log

  • Saat mencatat log ke syslog, format teks pesan sekarang mencakup informasi komponen. Contoh:

    ...  ACCESS   [repl writer worker 5] Modifikasi yang tidak didukung pada koleksi roles ...

    Pada versi sebelum MongoDB 4.2, teks pesan syslog tidak mencakup informasi komponen. Contoh:

    ... [repl writer worker 1] Modifikasi yang tidak didukung pada koleksi roles ...
  • Mulai dari MongoDB 4.2, perintah pengambilan log memotong setiap peristiwa yang berisi lebih dari 1.024 karakter. Pada versi sebelum MongoDB 4.2, perintah memotong setelah 512 karakter.

  • Mulai dari MongoDB 4.2, MongoDB mencatat level log debug. Sebagai contoh, jika level log adalah 2, MongoDB mencatat D2.

    Sebelum MongoDB 4.2, pesan log MongoDB hanya menentukan D sebagai level debug.

Protokol wire

Mulai dari MongoDB 4.2, MongoDB tidak lagi mendukung OP_COMMAND dan protokol tulis OP_COMMANDREPLY yang sesuai.

Perubahan killcursors

Transaksi

Mulai dari MongoDB 4.2, Anda tidak dapat menentukan killCursors sebagai operasi pertama dalam transaksi.

Izin

Mulai dari MongoDB 4.2, Anda selalu dapat mengakhiri kursor, terlepas dari apakah Anda memiliki izin killCursors. Dengan demikian, izin killCursors tidak lagi berlaku di MongoDB 4.2 dan versi berikutnya.

Pada MongoDB versi 3.6.3 hingga 4.0.x, Anda memerlukan izin killCursors untuk mengakhiri kursor saat kontrol akses diaktifkan.

Penghapusan parameter AsyncRequestsSenderUseBaton

Mulai dari MongoDB 4.2, MongoDB menghapus parameter AsyncRequestsSenderUseBaton dan selalu mengaktifkan peningkatan kinerja yang dikontrol oleh parameter ini.

Validasi sintaks count yang lebih ketat

Mulai MongoDB 4.2, MongoDB menerapkan validasi yang lebih ketat terhadap nama opsi untuk perintah count. Jika nama opsi yang tidak dikenal ditentukan, perintah akan melaporkan kesalahan.

Sebelum MongoDB 4.2, MongoDB mengabaikan opsi dengan nama yang tidak valid.

Sesi yang konsisten secara kausal

Mulai MongoDB 4.2, perintah berikut tidak lagi mendukung afterClusterTime:

  • Perintah dbHash

  • Perintah mapReduce

  • Perintah validate

Oleh karena itu, operasi ini tidak dapat dihubungkan dengan sesi yang konsisten secara kausal.

Penghapusan metrik fastmodinsert

MongoDB 4.2 menghapus metrik fastmodinsert yang sudah didepreciasi dari berbagai keluaran, termasuk executionStats explain dan keluaran profiler.

Map-Reduce

Mulai MongoDB 4.2, item-item berikut telah didepreciasi:

  • Opsi map-reduce untuk membuat koleksi ter-shard dan dukungan untuk penggunaan opsi sharded untuk map-reduce. Untuk mengeluarkan hasil ke koleksi ter-shard, buat koleksi ter-shard terlebih dahulu. MongoDB 4.2 juga mendepreciasi penggantian koleksi ter-shard yang ada.

  • Spesifikasi eksplisit dari opsi nonAtomic: false untuk map-reduce.

Status balancer dan pemisahan otomatis

Mulai MongoDB 4.2:

  • Perintah balancerStart dan metode pembantu mongo shell sh.startBalancer() dan sh.setBalancerState(true) juga mengaktifkan pemisahan otomatis.

    Untuk menonaktifkan pemisahan otomatis, gunakan sh.disableAutoSplit().

  • Perintah balancerStop dan metode pembantu mongo shell sh.stopBalancer() dan sh.setBalancerState(false) juga menonaktifkan pemisahan otomatis.

    Untuk mengaktifkan pemisahan otomatis, gunakan sh.enableAutoSplit().

Metode sh.enableBalancing(namespace) dan sh.disableBalancing(namespace) tidak lagi memengaruhi pemisahan otomatis.

Laporan diagnostik kunci

Mulai MongoDB 4.2, MongoDB melaporkan informasi terkait kunci ReplicationStateTransition.

Selain itu, MongoDB 4.2 memisahkan informasi kunci ParallelBatchWriterMode dari informasi (kunci global). Versi sebelumnya melaporkan informasi kunci ParallelBatchWriterMode sebagai bagian dari informasi (kunci global).

Untuk operasi yang melaporkan informasi kunci, lihat:

  • Perintah serverStatus dan metode db.serverStatus().

  • Tahap pipeline agregasi $currentOp, perintah currentOp, dan metode db.currentOp().

Validasi argumen query, pengurutan, atau proyeksi untuk findAndModify

Mulai dari MongoDB 4.2 (termasuk V4.0.12+ dan 3.6.14+), perintah findAndModify dan metode mongo shell terkait akan melaporkan kesalahan jika argumen query, pengurutan, atau proyeksi yang diberikan bukan dokumen.

Sebelum MongoDB 4.2, operasi memperlakukan argumen query atau pengurutan non-dokumen sebagai dokumen kosong {}.

DropDatabase dan movePrimary

Mulai MongoDB 4.2:

  • Jika Anda menghapus database dan membuat database lain dengan nama yang sama, lakukan salah satu operasi berikut:

    • Mulai ulang semua instance mongos dan anggota shard, atau

    • Jalankan perintah flushRouterConfig pada semua instance mongos dan anggota shard sebelum membaca dari atau menulis ke database yang dibuat.

  • Jika Anda menggunakan perintah movePrimary untuk memindahkan koleksi yang tidak di-shard, lakukan salah satu operasi berikut:

    • Mulai ulang semua instance mongos dan anggota shard, atau

    • Jalankan perintah flushRouterConfig pada semua instance mongos dan anggota shard sebelum membaca dari atau menulis ke koleksi tersebut.

Hal ini memastikan bahwa mongos dan anggota shard membersihkan cache metadata mereka. Jika tidak, pembacaan mungkin melewatkan data, dan penulisan mungkin tidak sampai ke shard yang benar, sehingga diperlukan intervensi manual untuk pemulihan.

Sebelum MongoDB 4.2, Anda cukup memulai ulang instance mongos atau menjalankan perintah flushRouterConfig pada instance mongos.

Penghapusan koleksi system.indexes dan system.namespaces

Mulai MongoDB 4.2, koleksi system.indexes dan system.namespaces (yang sudah didepreciasi sejak MongoDB 3.0) dihapus oleh MongoDB.

Dengan penghapusan koleksi-koleksi ini, peran bawaan clusterManager, clusterMonitor, dbAdmin, read, restore, serta peran lain yang mewarisi dari peran-peran tersebut, tidak lagi memiliki izin untuk mengakses koleksi system.indexes dan system.namespaces.

Kebutuhan membersihkan direktori data untuk menurunkan arbiter

File data arbiter di MongoDB 4.2 tidak kompatibel dengan MongoDB 4.0. Untuk menurunkan dari MongoDB 4.2 ke 4.0, hapus file data arbiter terlebih dahulu. Kesalahan mungkin terjadi jika Anda menggunakan file data di MongoDB 4.2 untuk menjalankan arbiter di MongoDB 4.0.

Koleksi ter-shard dan penggantian dokumen

Mulai MongoDB 4.2:

  • Operasi penggantian dokumen seperti replaceOne() atau update() (ketika digunakan dengan dokumen pengganti) pertama-tama mencoba menemukan shard menggunakan filter query. Jika operasi tidak dapat menemukan shard menggunakan filter query, maka akan mencoba memanfaatkan dokumen pengganti. Sebelum MongoDB 4.2, operasi penggantian dokumen hanya menggunakan dokumen pengganti untuk menemukan shard.

  • MongoDB mendepreciasi metode save(). Gunakan metode insertOne() atau replaceOne() sebagai gantinya. Metode save() tidak dapat digunakan pada koleksi ter-shard yang tidak di-shard berdasarkan _id. Jika Anda menggunakan metode save(), kesalahan akan terjadi.

  • Untuk operasi penggantian dokumen dengan pengaturan upsert: true pada koleksi ter-shard, filter harus mencakup pencocokan kesetaraan pada kunci shard koleksi tersebut.

Kompatibilitas fitur MongoDB 4.2

Beberapa fitur di MongoDB 4.2 memerlukan tidak hanya binari versi 4.2, tetapi juga pengaturan versi kompatibilitas fitur (fCV) ke 4.2. Fitur-fitur tersebut antara lain:

  • Transaksi terdistribusi.

  • Penghapusan batas panjang kunci indeks untuk versi MongoDB dengan fCV diatur ke 4.2+. Selain itu, parameter failIndexKeyTooLong tidak berpengaruh untuk versi MongoDB dengan fCV diatur ke 4.2+, dan hanya berlaku untuk versi MongoDB 2.6 hingga 4.0.

  • Penghapusan batas panjang nama indeks untuk versi MongoDB dengan fCV diatur ke 4.2+.

  • Format internal baru untuk indeks unik. Format baru ini berlaku untuk semua indeks unik yang ada dan indeks unik baru yang dibuat atau dibangun ulang.

  • Mulai dari MongoDB 4.2, Anda tidak dapat lagi menggunakan type:0 sebagai sinonim untuk exists:false.

  • MongoDB 4.2 menambahkan indeks wildcard untuk mendukung beban kerja di mana Anda menanyakan bidang kustom atau berbagai bidang berbeda ada dalam koleksi.