All Products
Search
Document Center

ApsaraDB for MongoDB:Fitur MongoDB 8.3

Last Updated:Aug 22, 2026

ApsaraDB for MongoDB 8.3 memperkenalkan perintah penghapusan shard granular, pencatatan kueri lambat yang sedang berjalan, pelacakan memori per operasi, dan ekspresi agregasi baru.

Untuk changelog komunitas, lihat MongoDB 8.3 release notes.

Ikhtisar

ApsaraDB for MongoDB 8.3 mencakup perubahan berikut:

Untuk changelog komunitas lengkap, lihat MongoDB 8.3 release notes.

Peningkatan agregasi

Akses indeks array

$map, $filter, dan $reduce kini mengekspos indeks elemen saat ini. Ikatkan ke variabel dengan arrayIndexAs atau gunakan variabel bawaan $$IDX.

// Tambahkan bidang "rank" berbasis 1 ke setiap elemen
db.scores.aggregate([
  { $project: {
      ranked: { $map: {
        input: "$items",
        as: "item",
        arrayIndexAs: "i",
        in: { value: "$$item", rank: { $add: ["$$i", 1] } }
      }}
  }}
])

Ekspresi baru

Ekspresi

Tujuan

Kasus penggunaan contoh

$subtype

Mengembalikan subtype BinData

Membedakan UUID dari bidang biner generik

$createObjectId

Menghasilkan ObjectId acak dalam pipeline

Menetapkan ID selama $merge atau $out tanpa round-trip client

$hash / $hexHash

Menghasilkan hash MD5, SHA-256, atau XXH64

Menghitung sidik jari konten atau kunci partisi di sisi server

$serializeEJSON / $deserializeEJSON

Mengonversi antara BSON dan Extended JSON

Mengurai string JSON yang disimpan sebagai bidang teks kembali ke BSON bertipe

Konversi tipe yang lebih luas

  • $toString kini mendukung objek, array, ekspresi reguler, MaxKey, MinKey, dan timestamp.

  • $convert menambahkan parameter base untuk konversi string atau angka dalam basis-2, -8, -10, dan -16.

  • Diperkenalkan konversi baru $toArray (string ke array, binData ke array numerik) dan $toObject (string ke objek). Lihat Convert binData to Array.

Penyempurnaan manajemen shard

Penghapusan shard granular

removeShard telah ditinggalkan. Empat perintah baru membagi proses penghapusan shard menjadi tahapan diskret yang dapat dibalik:

Tahap

Perintah

Deskripsi

Start

startShardDraining

Memulai migrasi chunk dari shard target

Pause

stopShardDraining

Menghentikan migrasi; shard tetap berada dalam kluster

Monitor

shardDrainingStatus

Mengembalikan progres migrasi dan jumlah chunk yang tersisa

Commit

commitShardRemoval

Menyelesaikan penghapusan setelah draining selesai

Anda dapat menjeda dan melanjutkan proses draining kapan saja—berguna selama jendela pemeliharaan atau lonjakan beban tak terduga.

Persyaratan routing DDL

Operasi DDL dan applyOps kini harus melewati mongos. Menjalankannya langsung pada node shard tidak lagi diizinkan, guna mencegah ketidakkonsistenan metadata dalam kluster sharded.

Peningkatan pemantauan dan diagnostik

Pencatatan kueri lambat yang sedang berjalan

Kueri lambat kini dicatat saat masih berjalan, bukan hanya setelah selesai. Setiap kueri dicatat satu kali ketika melebihi ambang batas.

Tetapkan ambang batas dengan --defaultSlowInProgMS saat startup, atau secara dinamis saat runtime:

db.setProfilingLevel(1, { slowms: 100, slowinprogms: 3000 })

Setiap entri log menyertakan originalQueryShapeHash yang menghubungkan log tingkat shard kembali ke permintaan asli pada mongos.

Pelacakan memori per operasi

Dua bidang baru ditambahkan ke $currentOp, db.currentOp(), profiler, log kueri lambat, output explain, dan PlanCache.list():

Bidang

Deskripsi

inUseTrackedMemBytes

Memori saat ini yang dikonsumsi oleh operasi

peakTrackedMemBytes

Puncak memori yang dikonsumsi oleh operasi

Gunakan bidang-bidang ini untuk mengidentifikasi kueri yang memakan banyak memori dan menetapkan batas yang tepat.

queryStats pada server shard

Saat queryStats diaktifkan, server shard kini mencatat kueri yang diteruskan dari mongos. Pada versi sebelumnya, kueri tersebut tidak terlihat di tingkat shard.

Output serverStatus selektif

Metrik baru mencakup ekstensi agregasi, bagian kritis shard, operasi TTL, pencarian vektor, latensi pengambilan oplog replikasi, dan penerimaan antrian eksekusi.

Gunakan flag baru none: 1 untuk menonaktifkan semua bagian opsional, lalu aktifkan secara selektif:

db.runCommand({ serverStatus: 1, none: 1, locks: 1 })

Gunakan lockContentionMetrics: 1 untuk menyertakan data contention lock sesuai permintaan.

Catatan

Bidang service telah dihapus dari output serverStatus.

Peningkatan retensi FTDC

Batas direktori diagnostik FTDC default ditingkatkan dari 200 MB menjadi 500 MB. connPoolStats kini dikumpulkan untuk mongod.

Parameter kinerja dan sistem

Batas resource pra-otentikasi

Tiga parameter baru membatasi resource yang dikonsumsi oleh koneksi yang belum diautentikasi:

Parameter

Tujuan

capMemoryConsumptionForPreAuthBuffers

Membatasi total memori untuk buffer pra-otentikasi

messageSizeErrorRateSec

Membatasi laju respons error ukuran pesan

preAuthMaximumMessageSizeBytes

Membatasi ukuran maksimum isi pesan sebelum otentikasi

Pengaturan ini melindungi instans dari kehabisan resource akibat serangan flooding koneksi.

Pemulihan tekanan cache otomatis

cachePressureQueryPeriodMilliseconds mengontrol frekuensi pemeriksaan tekanan cache oleh mesin penyimpanan. Saat tekanan terdeteksi, transaksi tertua secara otomatis dihentikan untuk membebaskan cache.

Pemilihan server yang sadar beban berlebih

Saat overloadAwareServerSelectionEnabled diaktifkan, klien yang menerima SystemOverloadedError secara otomatis mencoba ulang ke node berbeda.

Lima parameter mengatur penyesuaian backoff percobaan ulang untuk koneksi internal antara mongos dan mongod:

Parameter

Kontrol

defaultClientBaseBackoffMillis

Delay percobaan ulang awal

defaultClientMaxBackoffMillis

Delay percobaan ulang maksimum

defaultClientRetryAttempts

Jumlah percobaan ulang maksimum

shardRetryTokenBucketCapacity

Ukuran pool token percobaan ulang beban berlebih per shard

shardRetryTokenReturnRate

Laju pengembalian token pada permintaan sukses

Pengecualian pembatasan laju Ingress

ingressRequestRateLimiterApplicationExemptions mengecualikan aplikasi tertentu (berdasarkan appName) dari batas laju ingress. Tetapkan nama aplikasi dalam string koneksi:

mongodb://server:27017/db?appname=mongodump

Kontrol dampak profiler

Dua parameter mencegah profiler menurunkan kinerja produksi:

Parameter

Tujuan

internalQueryGlobalProfilingLockDeadlineMs

Timeout global untuk lock profiling

internalProfilingMaxAbandonedWritesPerSecondPerDb

Batas atas penulisan profiler yang ditinggalkan per database per detik

Pantau overhead profiler melalui profiler.totalAbandonedWrites dan profiler.dbsPastThreshold dalam serverStatus.

Perubahan indeks

Peningkatan versi default 2dsphere

2dsphereVersion default berubah dari 3 menjadi 4.

Penting

Sebelum menurunkan spesifikasi FCV di bawah 8.3, hapus terlebih dahulu semua indeks 2dsphere versi-4.

Prioritas GeoJSON dalam pembuatan indeks

Saat dokumen berisi koordinat GeoJSON dan koordinat numerik lama, pembuatan indeks kini memprioritaskan GeoJSON. Jika Anda mengandalkan koordinat lama dalam indeks yang ada, bangun ulang indeks tersebut setelah upgrade.

Perubahan time series

Perubahan

Detail

Batasan kunci shard

refineCollectionShardKey pada koleksi time-series kini mengharuskan kunci shard merujuk ke metadata logis dan bidang waktu. Kunci format bucket tidak lagi diterima.

Pemberian nama indeks

Indeks time-series tidak lagi dapat diberi nama _id_, dan _id_ tidak dapat digunakan sebagai petunjuk.

Pemberian nama timeField

Nama timeField tidak lagi boleh dimulai dengan $.

Perubahan perilaku

Area

Perubahan

Perilaku sebelumnya

Kode kesalahan upsert

Upsert yang menghasilkan objek BSON > 16 MB mengembalikan kode kesalahan 10334 (BSONObjectTooLarge)

Mengembalikan 17419 atau 17420

validate

validate memeriksa dokumen yang melebihi 16 MB. validate(full=true) tidak lagi mengaktifkan checkBSONConformance secara otomatis.

Tidak ada pemeriksaan 16 MB; validasi penuh mengaktifkan konformansi BSON

Aritmetika tanggal

$dateAdd / $dateSubtract dengan satuan non-milidetik dan tanggal sebelum epoch mungkin mengembalikan hasil satu detik lebih lambat

Lebih cepat tetapi kurang akurat

Penguraian float

Kisaran penuh float presisi ganda (termasuk subnormal seperti 7.08263e-317) kini dapat diurai

Subnormal ditolak

Batas karakter $trim

Argumen chars dari $trim, $ltrim, dan $rtrim dibatasi hingga 4.096 karakter

Tidak ada batas

$mergeObjects

Kini dapat digunakan di dalam $setWindowFields

Tidak didukung

Teks atau memori

Tahap TextOr ($text scoring) dibatasi hingga 100 MB; menggunakan disk saat allowDiskUse bernilai true

Tidak ada batas

explain pada DB tidak ada

explain() pada database yang tidak ada dalam kluster sharded tidak lagi membuat database tersebut secara implisit

Database dibuat secara implisit

config.csrs.indexes

Koleksi sistem config.csrs.indexes telah dihapus

Saat ini

findShardsOnConfigTimeoutMS

Parameter baru yang membatasi waktu kueri pada config.shards

Tidak ada timeout