Ce que fait cet outil
Un échantillon JSON devient un schéma Mongoose, un const par objet, et un modèle à la fin.
{ "id": 1, "name": "Ada", "address": { "city": "Paris" } }
import mongoose from 'mongoose';
const AddressSchema = new mongoose.Schema({
city: { type: String, required: true },
});
const RootSchema = new mongoose.Schema({
id: { type: Number, required: true },
name: { type: String, required: true },
address: { type: AddressSchema, required: true },
});
export default mongoose.model('Root', RootSchema);
Les enfants d’abord : les schémas sont des valeurs d’exécution, l’un doit exister avant qu’un autre l’emploie. Un tableau de documents à la racine décrit son premier élément — c’est lui la forme de l’enregistrement, la liste étant déjà ce qu’est la collection.
required sur un tableau a besoin d’aide
Mongoose donne à tout tableau la valeur par défaut []. Un champ déclaré { type: [String], required: true } valide donc même quand la clé est absente : le défaut satisfait l’exigence. Vérifié sur Mongoose 9 :
| document | required: true | required: true, default: undefined |
|---|---|---|
{ tags: ["a"] } | passe | passe |
{ tags: [] } | passe | passe |
{} | passe | échoue |
La première colonne ne dit pas ce que le mot promet. Les champs tableau sont donc émis avec default: undefined à côté de required: true, pour qu’un tableau manquant soit l’erreur qu’il prétend être. Un tableau vide passe toujours, et c’est juste : c’est une valeur.
Les objets imbriqués deviennent des sous-documents, avec leur propre _id
address ci-dessus est un sous-document, et Mongoose lui donne un _id à lui :
{ _id: ObjectId("…"), address: { city: "Paris", _id: ObjectId("…") } }
C’est le défaut de Mongoose, pas un ajout d’ici. Si ces identifiants internes sont du bruit pour vous, new mongoose.Schema({ … }, { _id: false }) les retire — une décision sur vos documents, et c’est pourquoi elle vous est laissée.
Un export MongoDB n’est pas le JSON que vous voulez
mongoexport écrit du JSON étendu :
{ "_id": { "$oid": "65f1c…" }, "created": { "$date": "2026-01-01T00:00:00Z" } }
Ce sont des objets : le générateur en fait des schémas de sous-documents, et _id finit en sous-document porteur de son propre _id, ce qui n’est certainement pas votre intention. Remplacez-les à la main par mongoose.Schema.Types.ObjectId et Date. Une clé nommée $oid veut dire quelque chose pour MongoDB et rien pour un lecteur de structures.
Mixed est l’endroit où l’échantillon s’est tu
null, une valeur inconnue, un tableau vide et un tableau hétérogène donnent tous mongoose.Schema.Types.Mixed. Un champ Mixed n’est pas validé et, bon à savoir, ses modifications ne sont pas suivies automatiquement : il faut appeler markModified. Restreignez-le dès que vous savez ce qui doit s’y trouver.
Confidentiel par conception
Tout s’exécute localement dans votre navigateur en JavaScript. Vos données ne sont jamais envoyées sur un serveur, ce qui rend l’outil sûr pour des contenus sensibles, et il fonctionne hors ligne.