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 |
|
| |
|
| |
|
| |
|
| Diubah di MongoDB 3.6. |
|
| |
| ||
|
| |
|
| |
| ||
|
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
$toBooldan$toInt) dan peningkatanTransaksi 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
$neardan$nearSphere.Untuk perintah
createdan metode shell mongodb.createCollection(), saat membuat koleksi di database selain databaselocal, Anda tidak dapat menyetel opsiautoIndexIdkefalse.Jika Anda mengaktifkan autentikasi dan menjalankan perintah
listDatabasestanpa izin operasilistDatabases, MongoDB mengembalikan daftar semua database tempat Anda memiliki izin operasifind. Sebelum MongoDB 4.0, jika Anda menjalankan perintah tanpa izin operasilistDatabases, MongoDB mengembalikanUnauthorized.Nilai default dari
taskExecutorPoolSizediubah dari0menjadi1. Di Linux, untuk mengembalikan perilaku sebelumnya dari penyebaran V4.0, aturtaskExecutorPoolSizeke0danAsyncRequestsSenderUseBatonkefalse.MongoDB 4.0 tidak mengizinkan Anda menyetel
transportLayerdannet.transportLayerkelegacyuntuk instansi mongod dan mongos.transportLayerdisetel keasiosecara default dan tidak dapat diubah.Mulai MongoDB 4.0, perintah
reIndexdandb.collection.reIndex()-nya mengambil kunci eksklusif global dan memblokir operasi lain hingga selesai.Jika nilai bidang selain
year,isoYear, dantimezonemelebihi rentang valid mereka,$dateFromPartsmengurangi selisih dari bagian tanggal lain untuk menghitung tanggal. Sebelum MongoDB 4.0, nilai yang melebihi rentang valid menyebabkan kesalahan.Perilaku operasi
killCursorsdiubah. Sebelum MongoDB 4.0, jika mendapatkan ID kursor, Anda dapat membunuh kursor apa pun. Mulai MongoDB 4.0,killCursorshanya mengizinkan Anda membunuh kursor yang ada. Jika Anda tidak memiliki izin untuk membunuh kursor,killCursorsmengembalikan kesalahan.MongoDB 4.0 menambahkan operasi
killAnyCursoryang 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 tetap4.0, instansi mongos dapat terhubung normal ke instansi lain.Mulai MongoDB 4.0, MongoDB menyelesaikan alamat IP
localhostberdasarkan pengaturan yang ditentukan, bukan mengasumsikan127.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: nonedi file konfigurasi, atau gunakan parameter baris perintah--sslDisabledProtocols none.Untuk instansi mongos, gunakan
net.ssl.disabledProtocols: noneatau--sslDisabledProtocols none.Untuk shell mongo, tambahkan parameter
--sslDisabledProtocols none.Parameter
--sslDisabledProtocolsdapat 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
listCollectionuntuk menjalankan perintah.Jika pengguna tanpa izin menjalankan perintah, MongoDB menyertakan hasil perkiraan di bidang
authenticatedUserPrivilegesyang dikembalikan olehconnectionStatus.
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:
Gunakan
mongodumpuntuk mengekspor databasetestke file arsip bernamamongodump-test-db.mongodump --archive="mongodump-test-db" --db=testGunakan
mongorestorebersama dengan parameter--nsFromdan--nsTountuk memulihkan data dari file arsip.mongorestore --archive="mongodump-test-db" --nsFrom='test.*' --nsTo='examples.*'
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
$geoNearOperator kueri
$nearOperator 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
replSetGetStatustelah ditinggalkan:replSetGetStatus.syncingToreplSetGetStatus.members[n].syncingTo
Gunakan
replSetGetStatus.replSetGetStatus.syncSourceHostdanreplSetGetStatus.members[n].syncSourceHostsebagai gantinya.Tahap agregasi
$currentOp, perintahcurrentOp, dan fungsi pembantudb.currentOp()tidak lagi mengembalikan bidangthreadIddi keluaran mereka.Bidang
asserts.warningdalamserverStatusselalu mengembalikan nilai0.