Tous les produits
Search
Centre de documentation

ApsaraDB for MongoDB:Fonctionnalités de MongoDB 8.3

Dernière mise à jour :Sep 10, 2026

ApsaraDB for MongoDB 8.3 introduit des commandes granulaires pour la suppression de shards, la journalisation des requêtes lentes en cours d'exécution, le suivi de la mémoire par opération et de nouvelles expressions d'agrégation.

Pour consulter le journal des modifications de la communauté, reportez-vous aux notes de version de MongoDB 8.3.

Vue d'ensemble

ApsaraDB for MongoDB 8.3 inclut les modifications suivantes :

Pour le journal complet des modifications de la communauté, consultez les notes de version de MongoDB 8.3.

Améliorations de l'agrégation

Accès à l'index du tableau

Les opérateurs $map, $filter et $reduce exposent désormais l'index de l'élément courant. Liez-le à une variable avec arrayIndexAs ou utilisez la variable intégrée $$IDX.

// Add a 1-based "rank" field to each element
db.scores.aggregate([
  { $project: {
      ranked: { $map: {
        input: "$items",
        as: "item",
        arrayIndexAs: "i",
        in: { value: "$$item", rank: { $add: ["$$i", 1] } }
      }}
  }}
])

Nouvelles expressions

Expression

Objectif

Cas d'utilisation

$subtype

Renvoie le sous-type BinData

Distinguer les UUID des champs binaires génériques

$createObjectId

Génère un ObjectId aléatoire dans un pipeline

Attribuer des ID lors de $merge ou $out sans aller-retour client

$hash / $hexHash

Produit des hachages MD5, SHA-256 ou XXH64

Calculer des empreintes de contenu ou des clés de partition côté serveur

$serializeEJSON / $deserializeEJSON

Convertit entre BSON et Extended JSON

Analyser les chaînes JSON stockées en tant que champs texte pour les reconvertir en BSON typé

Conversions de types élargies

  • $toString gère désormais les objets, les tableaux, les expressions régulières, MaxKey, MinKey et les horodatages.

  • $convert ajoute un paramètre base pour les conversions de chaînes/nombres en bases 2, 8, 10 et 16.

  • Nouvelles conversions $toArray (chaîne vers tableau, binData vers tableau numérique) et $toObject (chaîne vers objet). Consultez Convertir binData en tableau.

Refonte de la gestion des shards

Suppression granulaire des shards

removeShard est obsolète. Quatre nouvelles commandes décomposent la suppression de shard en étapes discrètes et réversibles :

Étape

Commande

Description

Démarrage

startShardDraining

Démarre la migration des chunks hors du shard cible

Pause

stopShardDraining

Interrompt la migration ; le shard reste dans le cluster

Surveillance

shardDrainingStatus

Renvoie la progression de la migration et le nombre de chunks restants

Validation

commitShardRemoval

Finalise la suppression une fois le vidage terminé

Vous pouvez interrompre et reprendre le vidage à tout moment, ce qui s'avère utile pendant les fenêtres de maintenance ou en cas de pics de charge imprévus.

Exigence de routage DDL

Les opérations DDL et applyOps doivent désormais passer par mongos. Leur exécution directe sur un nœud shard n'est plus autorisée. Cela permet d'éviter les incohérences de métadonnées dans les clusters sharded.

Améliorations de la surveillance et du diagnostic

Journalisation des requêtes lentes en cours

Les requêtes lentes sont désormais journalisées pendant leur exécution, et non plus seulement après leur achèvement. Chaque requête est journalisée une fois lorsqu'elle dépasse le seuil défini.

Définissez le seuil avec --defaultSlowInProgMS au démarrage, ou à l'exécution :

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

Chaque entrée de journal inclut un originalQueryShapeHash qui relie le journal au niveau du shard à la requête d'origine sur mongos.

Suivi de la mémoire par opération

Deux nouveaux champs apparaissent dans $currentOp, db.currentOp(), le profileur, les journaux de requêtes lentes, la sortie explain et PlanCache.list() :

Champ

Description

inUseTrackedMemBytes

Mémoire actuellement consommée par l'opération

peakTrackedMemBytes

Mémoire maximale consommée par l'opération

Utilisez ces champs pour identifier les requêtes gourmandes en mémoire et définir des limites appropriées.

queryStats sur les serveurs de shards

Lorsque queryStats est activé, les serveurs de shards incluent désormais les requêtes transférées depuis mongos. Dans les versions précédentes, ces requêtes étaient invisibles au niveau du shard.

Sortie serverStatus sélective

De nouvelles métriques couvrent les extensions d'agrégation, les sections critiques de shard, les opérations TTL, la recherche vectorielle, la latence du récupérateur d'oplog de réplication et l'admission à la file d'attente d'exécution.

Utilisez le nouveau flag none: 1 pour supprimer toutes les sections facultatives et opter sélectivement pour celles souhaitées :

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

Utilisez lockContentionMetrics: 1 pour inclure les données de contention de verrous à la demande.

Remarque

Le champ service a été supprimé de la sortie serverStatus.

Augmentation de la rétention FTDC

Le plafond par défaut du répertoire de diagnostic FTDC passe de 200 Mo à 500 Mo. connPoolStats est désormais collecté pour mongod.

Performances et paramètres système

Plafonds de ressources avant authentification

Trois nouveaux paramètres limitent les ressources consommées par les connexions non authentifiées :

Paramètre

Objectif

capMemoryConsumptionForPreAuthBuffers

Plafonne la mémoire totale pour les tampons pré-authentification

messageSizeErrorRateSec

Limiter le taux des réponses d'erreur liées à la taille des messages

preAuthMaximumMessageSizeBytes

Limite la taille maximale du corps du message avant authentification

Ces paramètres protègent les instances contre l'épuisement des ressources causé par les attaques par inondation de connexions.

Récupération automatique en cas de pression sur le cache

cachePressureQueryPeriodMilliseconds contrôle la fréquence à laquelle le moteur de stockage vérifie la pression sur le cache. Lorsqu'une pression est détectée, les transactions les plus anciennes sont automatiquement abandonnées pour libérer de l'espace dans le cache.

Sélection de serveur consciente de la surcharge

Lorsque overloadAwareServerSelectionEnabled est activé, un client qui reçoit une erreur SystemOverloadedError réessaie automatiquement auprès d'un autre nœud.

Cinq paramètres permettent d'affiner le backoff des tentatives pour les connexions internes entre mongos et mongod :

Paramètre

Contrôle

defaultClientBaseBackoffMillis

Délai initial de nouvelle tentative

defaultClientMaxBackoffMillis

Délai maximal de nouvelle tentative

defaultClientRetryAttempts

Nombre maximal de tentatives

shardRetryTokenBucketCapacity

Taille du pool de jetons de nouvelle tentative en cas de surcharge par shard

shardRetryTokenReturnRate

Taux de retour des jetons lors des requêtes réussies

Exemptions de limitation du débit entrant

ingressRequestRateLimiterApplicationExemptions exempte certaines applications (par appName) des limites de débit entrant. Définissez le nom de l'application dans la chaîne de connexion :

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

Contrôle de l'impact du profileur

Deux paramètres empêchent le profileur de dégrader les performances en production :

Paramètre

Objectif

internalQueryGlobalProfilingLockDeadlineMs

Délai d'expiration global pour le verrou de profilage

internalProfilingMaxAbandonedWritesPerSecondPerDb

Plafond des écritures de profileur abandonnées par base de données et par seconde

Surveillez la surcharge du profileur avec profiler.totalAbandonedWrites et profiler.dbsPastThreshold dans serverStatus.

Modifications des index

Mise à niveau de la version par défaut 2dsphere

La version par défaut 2dsphereVersion passe de 3 à 4.

Important

Avant de rétrograder FCV en dessous de 8,3, supprimez d'abord tous les index 2dsphere de version 4.

Priorité GeoJSON dans la génération d'index

Lorsqu'un document contient à la fois des coordonnées GeoJSON et des coordonnées numériques héritées, la génération d'index privilégie désormais GeoJSON. Si vous dépendez des coordonnées héritées dans les index existants, reconstruisez ces index après la mise à niveau.

Modifications des séries temporelles

Modification

Détail

Contrainte de clé de shard

refineCollectionShardKey sur les collections de séries temporelles exige désormais que la clé de shard référence les champs de métadonnées logiques et de temps. Les clés au format bucket ne sont plus acceptées.

Nommage des index

Les index de séries temporelles ne peuvent plus être nommés _id_, et _id_ ne peut pas être utilisé comme indice (hint).

Nommage de timeField

Un nom timeField ne peut plus commencer par $.

Changements de comportement

Domaine

Modification

Comportement précédent

Codes d'erreur Upsert

Les upserts produisant des objets BSON > 16 Mo renvoient le code d'erreur 10334 (BSONObjectTooLarge)

Renvoyait 17419 ou 17420

validate

validate vérifie la présence de documents dépassant 16 Mo. validate(full=true) n'active plus automatiquement checkBSONConformance.

Aucune vérification de 16 Mo ; la validation complète activait la conformité BSON

Arithmétique des dates

$dateAdd / $dateSubtract avec des unités non millisecondes et des dates antérieures à l'époque peuvent renvoyer des résultats avec une seconde de retard

Plus rapide mais moins précis

Analyse des flottants

La plage complète des nombres à virgule flottante en double précision (y compris les subnormaux comme 7.08263e-317) peut désormais être analysée

Subnormaux rejetés

Plafond de caractères $trim

L'argument chars de $trim, $ltrim et $rtrim est plafonné à 4 096 caractères

Aucun plafond

$mergeObjects

Peut désormais être utilisé à l'intérieur de $setWindowFields

Non pris en charge

Mémoire TextOr

L'étape TextOr ($text scoring) est plafonnée à 100 Mo ; débordement sur disque lorsque allowDiskUse est true

Aucun plafond

explain sur une base de données inexistante

explain() sur une base de données inexistante dans un cluster sharded ne crée plus implicitement la base de données

Base de données créée implicitement

config.csrs.indexes

La collection système config.csrs.indexes a été supprimée

Présente

findShardsOnConfigTimeoutMS

Nouveau paramètre qui limite le temps de requête sur config.shards

Aucun délai d'expiration