Bases de données et SQL

JSON étendu MongoDBavec les types visibles

Passez de Canonical à Relaxed et examinez les changements de type avant de copier le résultat.

JSON étendu MongoDB

Examiner ObjectId

Entrée EJSON

Résultat JSON

Le texte est traité dans ce navigateur, sans connexion à une base ni envoi du document.

Sortie et interprétation

Une seule valeur JSON stricte. Expressions shell, commentaires et clés répétées refusés.

Les entiers nus deviennent Int32/Int64, les formes décimales ou exponentielles deviennent Double. Les chaînes restent des chaînes.

Limites : 500 000 unités UTF-16, profondeur 100, 50 000 nœuds et 2 000 000 caractères en sortie.

Entrée ou options modifiées. Relancez avant d’exporter.

Le JSON étendu MongoDB apparaît souvent dans les exports contenant $oid, $date ou $numberDecimal. Ces objets décrivent des valeurs BSON : supprimer leur enveloppe change ce que le programme destinataire pourra reconstruire.

L’exemple contient volontairement un entier supérieur à la limite sûre de JavaScript. Comparez la conservation des chiffres et celle du type. Le texte source reste à côté du résultat et n’est jamais remplacé par la conversion.

Pourquoi utiliser le JSON étendu MongoDB ?

Comprendre la représentation avant de transmettre le document.

Préserver les enveloppes nécessaires

Le JSON étendu MongoDB démarre en mode canonique. Le mode détendu simplifie les nombres finis et certaines dates, mais garde les enveloppes ObjectId et Decimal128. La comparaison permet de voir la différence sans modifier la source.

Trois lignes typées : l’enveloppe numérique s’ouvre, celles de l’identifiant et du décimal restent intactes

Écrire les grands entiers en entier

Une valeur Long comme 9007199254740993 est écrite depuis son entier exact. Un avertissement rappelle qu’un programme utilisant JavaScript Number peut malgré tout l’arrondir. La précision du texte ne garantit pas celle de son lecteur.

Une suite complète de blocs numériques traverse un document, avec un avertissement côté réception

Adapter la représentation au destinataire

01

Fournir des données, pas une expression

ObjectId() et ISODate() ne sont pas de la syntaxe JSON. Exportez d’abord leurs enveloppes $oid et $date. Vous pouvez fournir un document, un tableau ou une valeur scalaire.

  • Exemple et Effacer proposent un aperçu du remplacement ; Annuler restaure une fois l’entrée et la sortie après application.
02

Comparer les deux modes

Gardez Canonical pour conserver les types explicites. Choisissez Relaxed pour la lecture, puis vérifiez les avertissements avant de copier la représentation JSON.

  • Modifier le mode ou le retrait désactive immédiatement l’export de l’ancien résultat.
03

Maîtriser le déclenchement

La conversion automatique attend 350 ms après la dernière modification. La désactiver annule le traitement en attente et affiche le bouton de conversion.

  • Ctrl/Cmd + Entrée lance aussi le traitement. Copie et téléchargement incluent tout le résultat, même hors écran.

Des types interprétés de façon explicite

Un ensemble BSON défini

Le moteur vérifie ObjectId, Decimal128, Int32, Int64, Double, dates, Binary, UUID, expressions régulières, Timestamp et MinKey/MaxKey. UUID devient une enveloppe binaire de sous-type 04. Les options des expressions régulières sont triées, sans exécuter le motif.

Dates au-delà de JavaScript Date

Canonical conserve les millisecondes signées sur 64 bits sous forme de chaîne, y compris hors de la plage Date. Relaxed utilise une date ISO en UTC uniquement de 1970 à 9999 ; les autres dates restent enveloppées en millisecondes.

Pas de devinette sur les chaînes

Un entier nu devient Int32 ou Int64 selon sa plage. Les écritures décimales ou exponentielles deviennent Double et peuvent être arrondies à la précision binaire 64 bits. Une chaîne ressemblant à une date ou à un identifiant reste une chaîne.

Syntaxe acceptée et limites

Un sous-ensemble strict de v2
Pas d’évaluation shell, de réparation automatique, de v1 ancien, ni de Code/Scope, DBPointer, Undefined ou Symbol. Les noms de champs ordinaires inconnus sont conservés ; les enveloppes reconnues doivent avoir exactement la structure attendue.
Pas de suppression de tous les types
Relaxed reste EJSON. Il ne supprime pas toute clé commençant par un dollar et ne convertit pas Decimal128 en Number. Passer à Canonical ne permet pas de retrouver avec certitude un type déjà perdu dans la source.
Une seule valeur JSON
JSONL, documents concaténés, BSON binaire, conteneurs Hex/Base64, mongodump et import de fichiers sont exclus. Traitez un document ou préparez un tableau. Il n’y a ni connexion à une base ni import dans une collection.
Des budgets explicites
Au maximum 500 000 unités UTF-16 en entrée, 100 niveaux, 50 000 nœuds et 2 000 000 caractères en sortie. Un débordement Int64, une date invalide ou une clé répétée bloque toute la conversion, sans export partiel.
Normaliser ne signifie pas reproduire les octets
Les espaces et l’écriture des dates peuvent changer. Decimal128 et les expressions régulières suivent le moteur officiel ; les nombres flottants suivent la précision binaire. Après toute modification, l’export attend un nouveau résultat valide.

Questions sur le JSON étendu MongoDB

Quelle différence entre Canonical et Relaxed ?

Canonical privilégie les informations de type et enveloppe aussi les nombres. Relaxed rend les nombres finis et les dates admissibles plus lisibles. Les deux sont du JSON valide ; ObjectId et Decimal128 gardent leurs enveloppes dans les deux modes.

Puis-je coller directement la sortie de mongosh ?

Seulement si elle est déjà du JSON/EJSON strict. ObjectId("…"), ISODate("…") et NumberLong("…") sont des expressions shell refusées. Exportez ou sérialisez d’abord le document en Extended JSON ; aucun code collé n’est exécuté.

Pourquoi NumberLong est-il représenté par une chaîne ?

Dans Canonical, la chaîne $numberLong protège les chiffres contre un arrondi prématuré par un lecteur JSON ordinaire. Ici, Relaxed écrit le littéral entier complet. Pour les grands entiers, le destinataire doit toutefois disposer d’un parseur sans perte.

Pourquoi ne pas écrire Decimal128 comme un nombre ordinaire ?

JavaScript Number offre une précision binaire 64 bits, différente de la précision décimale de Decimal128. La chaîne $numberDecimal conserve la représentation et le type. Son enveloppe reste donc présente même dans Relaxed.

Un fichier mongoexport entier est-il accepté ?

Oui uniquement si son contenu constitue une seule valeur JSON dans les limites indiquées, par exemple un tableau. L’export habituel par lignes est du JSONL et sera refusé. Traitez les documents séparément ou exportez préalablement un tableau.

Un résultat vous surprend ?

Vérifier les types avant l’export

Revenez au JSON étendu MongoDB, choisissez la représentation cible et relisez les avertissements de précision avant d’enregistrer.