全部产品
Search
文档中心

:Perubahan kompatibilitas di MongoDB 4.0

更新时间:Jun 27, 2025

Artikel ini menjelaskan perubahan kompatibilitas di MongoDB 4.0.

Untuk dokumentasi resmi tentang perubahan kompatibilitas MongoDB, kunjungi Dokumentasi Lama.

Penghapusan MONGODB-CR

Mulai MongoDB 4.0, MongoDB tidak lagi mendukung mode autentikasi MONGODB-CR yang telah ditinggalkan.

Mulai MongoDB 3.0, Anda tidak dapat lagi membuat pengguna MONGODB-CR, kecuali penyebaran ditingkatkan dari versi 2.6 atau lebih lama dan mode autentikasi untuk pengguna MONGODB-CR asli belum diperbarui.

Jika penyebaran Anda masih menggunakan mode MONGODB-CR untuk menyimpan kredensial pengguna, Anda harus meningkatkannya ke Salted Challenge Response Authentication Mechanism (SCRAM) sebelum menaikkan versi ke MongoDB 4.0.

Penghapusan perintah authSchemaUpgrade

MongoDB 4.0 menghapus perintah authSchemaUpgrade, yang sebelumnya digunakan pada MongoDB 3.0 hingga 3.6 untuk meningkatkan pengguna MONGODB-CR menjadi SCRAM.

Penghapusan dukungan MongoDB-CR dari db.copyDatabase() dan copydb

Metode db.copyDatabase() dan perintah copydb tidak dapat menyalin data dari instance mongod yang menggunakan mode autentikasi MONGODB-CR.

Selain itu, MongoDB 4.0 menghapus perintah copydbgetnonce.

Penghapusan MMAPv1

Mulai MongoDB 4.0, MongoDB menghentikan dukungan untuk mesin penyimpanan MMAPv1. Anda harus bermigrasi ke mesin penyimpanan WiredTiger.

Batas pada sertifikat autentikasi X.509

Mulai dari MongoDB 4.0, jika Anda menentukan --sslAllowInvalidCertificates atau net.ssl.allowInvalidCertificates: true (diubah namanya menjadi --tlsAllowInvalidateCertificates atau net.tls.allowInvalidCertificates: true di MongoDB 4.2) saat menggunakan autentikasi x.509, sertifikat yang tidak valid hanya cukup untuk membangun koneksi TLS/SSL tetapi tidak cukup untuk autentikasi.

Untuk menyelesaikan masalah ini, perbarui sertifikat yang tidak valid menjadi sertifikat yang valid (seperti yang ditandatangani oleh CA tepercaya) atau gunakan net.ssl.CAFile untuk menentukan CA kustom.

Instansi set replika

Penghapusan protokol set replika pv0

MongoDB 4.0 menghapus protokol set replika versi 0 (pv0) yang sudah ditinggalkan. Sebelum meningkatkan versi protokol Anda, tingkatkan terlebih dahulu ke pv1. Contoh kode:

cfg = rs.conf();
cfg.protocolVersion=1;
rs.reconfig(cfg);

Kami juga merekomendasikan agar Anda meningkatkan nilai settings.catchUpTimeoutMillis untuk mengurangi probabilitas rollback dengan konfigurasi tingkat tulis w:1.

Penghapusan replikasi master-slave

MongoDB 4.0 tidak lagi mendukung replikasi master-slave. Jika penyebaran Anda masih menggunakan mode ini, Anda harus mengonversinya ke mode set replika (CSRS).

Pencatatan untuk instansi set replika

Mulai MongoDB 4.0, Anda tidak dapat menonaktifkan fitur pencatatan untuk anggota set replika yang menggunakan mesin penyimpanan WiredTiger. Ini berarti Anda tidak dapat menentukan --nojournal atau storage.journal.enabled: false.

Pembuatan indeks untuk instansi set replika

Saat mengonfigurasi instansi set replika menggunakan --replSet atau replication.replSetName, Anda tidak dapat menentukan --noIndexBuildRetry atau storage.indexBuildRetry. Hal ini berarti bahwa opsi --noIndexBuildRetry atau storage.indexBuildRetry tidak dapat digunakan untuk instansi mongod yang merupakan anggota set replika.

Batas rollback

MongoDB 4.0 menghapus batas volume rollback sebesar 300 MB dan memperkenalkan parameter yang dapat dikonfigurasi rollbackTimeLimitSecs. Di MongoDB 4.0, batas waktu rollback default adalah 1 hari. Sebelum MongoDB 4.0, batas waktu rollback tetap selama 30 menit.

Instansi kluster sharded

mongos menggunakan tingkat perhatian tulis "majority" dalam operasi-operasi berikut yang memengaruhi metadata kluster sharded.

Perintah

Metode

Deskripsi

addShard

sh.addShard()

create

db.createCollection()

drop

db.collection.drop()

dropDatabase

db.dropDatabase()

Diubah di MongoDB 3.6.

enableSharding

sh.enableSharding()

movePrimary

renameCollection

db.collection.renameCollection()

shardCollection

sh.shardCollection()

removeShard

setFeatureCompatibilityVersion

Kompatibilitas fitur MongoDB 4.0

Beberapa fitur di MongoDB 4.0 memerlukan file biner V4.0 dan featureCompatibilityVersion disetel ke 4.0. Fitur-fitur tersebut meliputi:

  • SCRAM-SHA-256

  • Operator konversi tipe baru (termasuk $toBool dan $toInt) dan peningkatan

  • Transaksi Multi-Dokumen

  • Perubahan opsi $dateToString.

  • Metode Aliran Perubahan Baru

  • Perubahan tipe data token untuk melanjutkan aliran perubahan

Perubahan lainnya

  • Instansi kluster sharded mendukung operator kueri geospasial $near dan $nearSphere.

  • Untuk perintah create dan metode shell mongo db.createCollection(), saat membuat koleksi di database selain database local, Anda tidak dapat menyetel opsi autoIndexId ke false.

  • Jika Anda mengaktifkan autentikasi dan menjalankan perintah listDatabases tanpa izin operasi listDatabases, MongoDB mengembalikan daftar semua database tempat Anda memiliki izin operasi find. Sebelum MongoDB 4.0, jika Anda menjalankan perintah tanpa izin operasi listDatabases, MongoDB mengembalikan Unauthorized.

  • Nilai default dari taskExecutorPoolSize diubah dari 0 menjadi 1. Di Linux, untuk mengembalikan perilaku sebelumnya dari penyebaran V4.0, atur taskExecutorPoolSize ke 0 dan AsyncRequestsSenderUseBaton ke false.

  • MongoDB 4.0 tidak mengizinkan Anda menyetel transportLayer dan net.transportLayer ke legacy untuk instansi mongod dan mongos. transportLayer disetel ke asio secara default dan tidak dapat diubah.

  • Mulai MongoDB 4.0, perintah reIndex dan db.collection.reIndex()-nya mengambil kunci eksklusif global dan memblokir operasi lain hingga selesai.

  • Jika nilai bidang selain year, isoYear, dan timezone melebihi rentang valid mereka, $dateFromParts mengurangi selisih dari bagian tanggal lain untuk menghitung tanggal. Sebelum MongoDB 4.0, nilai yang melebihi rentang valid menyebabkan kesalahan.

  • Perilaku operasi killCursors diubah. Sebelum MongoDB 4.0, jika mendapatkan ID kursor, Anda dapat membunuh kursor apa pun. Mulai MongoDB 4.0, killCursors hanya mengizinkan Anda membunuh kursor yang ada. Jika Anda tidak memiliki izin untuk membunuh kursor, killCursors mengembalikan kesalahan.

  • MongoDB 4.0 menambahkan operasi killAnyCursor yang memberikan izin untuk membunuh kursor apa pun untuk koleksi tertentu.

  • Mulai MongoDB 4.0, ketika Anda mencoba menghubungkan instansi mongos ke instansi lain dengan versi kompatibilitas fitur (fCV) yang lebih tinggi, instansi mongos mungkin mogok. Misalnya, instansi mongos MongoDB 4.0 tidak dapat terhubung ke instansi kluster sharded dengan fCV disetel ke 4.2. Namun, jika fCV instansi kluster sharded tetap 4.0, instansi mongos dapat terhubung normal ke instansi lain.

  • Mulai MongoDB 4.0, MongoDB menyelesaikan alamat IP localhost berdasarkan pengaturan yang ditentukan, bukan mengasumsikan 127.0.0.1.

cursor.min() dan cursor.max()

Jika Anda menggunakan max() dan min() untuk menentukan rentang, nilai batas yang ditentukan oleh max() harus lebih besar daripada nilai yang ditentukan oleh min().

Pada versi sebelumnya, batas bisa sama, tetapi tidak ada entri indeks yang dipindai, sehingga menghasilkan set hasil kosong.

TLS 1.0 Dinonaktifkan

File biner MongoDB (mongod, mongos, dan mongo) menonaktifkan enkripsi TLS 1.0 secara default untuk sistem yang mendukung TLS 1.1+.

Untuk memaksa mengaktifkan TLS 1.0:

  • Untuk instansi mongod, tentukan net.ssl.disabledProtocols: none di file konfigurasi, atau gunakan parameter baris perintah --sslDisabledProtocols none.

  • Untuk instansi mongos, gunakan net.ssl.disabledProtocols: none atau --sslDisabledProtocols none.

  • Untuk shell mongo, tambahkan parameter --sslDisabledProtocols none.

    Parameter --sslDisabledProtocols dapat digunakan pada versi shell mongo berikut:

    • MongoDB 4.0+

    • MongoDB 3.6.5+

    • MongoDB 3.4.15+

Di macOS, jika menggunakan shell mongo MongoDB 3.6.4 atau lebih lama untuk terhubung ke instansi kluster sharded MongoDB 4.0+, Anda harus secara eksplisit mengaktifkan TLS 1.0.

Shell Mongo

show collections

Di shell mongo, perintah show collections setara dengan:

db.runCommand( { listCollections: 1.0, authorizedCollections: true, nameOnly: true } )
  • Bagi pengguna dengan izin, semua koleksi non-sistem di database mereka akan ditampilkan.

  • Bagi pengguna tanpa izin, hanya koleksi yang dapat diakses yang akan ditampilkan.

Jika shell mongo MongoDB 4.0 terhubung ke database MongoDB yang menjalankan versi lebih lama dari V4.0 yang tidak mendukung parameter authorizedCollections dan nameOnly:

  • Pengguna harus memiliki izin listCollection untuk menjalankan perintah.

  • Jika pengguna tanpa izin menjalankan perintah, MongoDB menyertakan hasil perkiraan di bidang authenticatedUserPrivileges yang dikembalikan oleh connectionStatus.

db.getCollectionNames()

Di shell mongo, metode db.getCollectionNames() setara dengan:

db.runCommand( { listCollections: 1.0, authorizedCollections: true, nameOnly: true } )
  • Untuk pengguna dengan izin akses, metode ini mencantumkan semua koleksi di database.

  • Untuk pengguna tanpa izin akses, metode ini hanya mencantumkan koleksi yang mereka miliki izin.

Penghapusan file biner dan bidang atau perintah yang ditinggalkan

mongoperf

MongoDB 4.0 menghapus file biner mongoperf.

Perintah copydb dan clone

MongoDB 4.0 menghentikan dukungan untuk perintah copydb dan clone, bersama dengan fungsi pembantu shell mongo db.copyDatabase() dan db.cloneDatabase().

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

Sebagai contoh, untuk menyalin database test ke database examples dalam instansi yang sama, ikuti 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.

Sebagai alternatif, 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.*'

Parameter

Parameter logUserIds yang sudah ditinggalkan dihapus.

$isolated operator

MongoDB tidak lagi mendukung operator $isolated. Jika Anda memiliki indeks atau tampilan yang berisi operator $isolated, buat ulang mereka tanpa operator ini sebelum meningkatkan versi.

Perintah geoNear

MongoDB menghentikan dukungan untuk perintah geoNear. Gunakan perintah berikut sebagai gantinya:

  • Tahap agregasi $geoNear

  • Operator kueri $near

  • Operator kueri $nearSphere

Opsi maxScan

MongoDB menghentikan dukungan untuk opsi maxScan dan metode shell mongo cursor.maxScan(). Gunakan maxTimeMS atau metode shell mongo cursor.maxTimeMS() sebagai gantinya.

Perubahan bidang keluaran

  • Bidang berikut dalam hasil pengembalian replSetGetStatus telah ditinggalkan:

    • replSetGetStatus.syncingTo

    • replSetGetStatus.members[n].syncingTo

    Gunakan replSetGetStatus.replSetGetStatus.syncSourceHost dan replSetGetStatus.members[n].syncSourceHost sebagai gantinya.

  • Tahap agregasi $currentOp, perintah currentOp, dan fungsi pembantu db.currentOp() tidak lagi mengembalikan bidang threadId di keluaran mereka.

  • Bidang asserts.warning dalam serverStatus selalu mengembalikan nilai 0.