JSON → Mongoose
Outils de développement MongoDB et Node.js

Générateur de Schémas Mongoose et Modèles TypeScript depuis JSON

Infère et génère des schémas MongoDB Mongoose, interfaces Document TypeScript, sous-documents imbriqués, horodatages et modèles exportables depuis du JSON.

Confidentialité 100% côté client
Zéro transmission au serveur
Préréglages :
Options du Compilateur Mongoose
User•Separate Subdocuments
Entrée JSON Brute
import mongoose, { Schema, Document, Model, Types } from 'mongoose';

// ============================================================================
// Subdocument TypeScript Interfaces
// ============================================================================
IProfile {
  firstName: string;
  lastName: string;
  avatarUrl: string;
  bio: string;
  website: string;
}

IAddress {
  label: string;
  street: string;
  city: string;
  state: string;
  zipCode: string;
  country: string;
  isPrimary: boolean;
}

IPreferences {
  theme: string;
  receiveNewsletter: boolean;
}

// ============================================================================
// Main Document Interface
// ============================================================================
IUserDocument extends Document {
  username: string;
  email: string;
  passwordHash: string;
  roles: string[];
  profile: IProfile;
  score: number;
  isActive: boolean;
  addresses: Types.DocumentArray<IAddress>;
  preferences: IPreferences;
  lastLoginAt: Date;
  createdAt: Date;
  updatedAt: Date;
}

// ============================================================================
// Nested Child Schemas
// ============================================================================
const ProfileSchema = new Schema<IProfile>(
  {
    firstName: { type: String, required: true, trim: true },
    lastName: { type: String, required: true, trim: true },
    avatarUrl: { type: String, required: true, trim: true },
    bio: { type: String, required: true, trim: true },
    website: { type: String, required: true, trim: true },
  },
  { _id: false }
);

const AddressSchema = new Schema<IAddress>(
  {
    label: { type: String, required: true, trim: true },
    street: { type: String, required: true, trim: true },
    city: { type: String, required: true, trim: true },
    state: { type: String, required: true, trim: true },
    zipCode: { type: String, required: true, trim: true },
    country: { type: String, required: true, trim: true },
    isPrimary: { type: Boolean, required: true },
  },
  { _id: false }
);

const PreferencesSchema = new Schema<IPreferences>(
  {
    theme: { type: String, required: true, trim: true },
    receiveNewsletter: { type: Boolean, required: true },
  },
  { _id: false }
);

// ============================================================================
// Root Document Schema
// ============================================================================
const UserSchema = new Schema<IUserDocument>(
  {
    username: { type: String, required: true, unique: true, trim: true },
    email: { type: String, required: true, unique: true, trim: true, lowercase: true },
    passwordHash: { type: String, required: true, trim: true },
    roles: [{ type: String, trim: true }],
    profile: { type: ProfileSchema, required: true },
    score: { type: Number, required: true },
    isActive: { type: Boolean, required: true },
    addresses: [AddressSchema],
    preferences: { type: PreferencesSchema, required: true },
    lastLoginAt: { type: Date, required: true },
  },
  {
    timestamps: true,
    versionKey: false
  }
);

// ============================================================================
// Model Export (Safe for Next.js Fast Refresh & Node.js Cluster)
// ============================================================================
User: Model<IUserDocument> =
  mongoose.models.User || mongoose.model<IUserDocument>('User', UserSchema);

export default User;
Champs de Schéma Inférés
26 Propriétés
Sous-Documents Imbriqués
3 Sous-schémas
Types BSON Détectés
AddressSchema, Boolean, Date, Number, PreferencesSchema, ProfileSchema, String

Inférence 100% Côté Client

L'analyse JSON et la synthèse de code s'exécutent entièrement dans le bac à sable de votre navigateur, sans transfert serveur.

Génération de Code Double

Génère simultanément schémas Mongoose, interfaces Document TypeScript, DTOs purs et schémas de validation Zod.

Bonnes Pratiques Mongoose

Gestion automatique des timestamps, références ObjectId, nettoyage de chaînes et contrôle des sous-documents.

Référence technique et guide d'architecture

Guide Développeur : Générateur de Schémas Mongoose et Modèles TypeScript depuis JSON — Guide de référence

Infère et génère des schémas MongoDB Mongoose, interfaces Document TypeScript, sous-documents imbriqués, horodatages et modèles exportables depuis du JSON.

Paramètres clés et contrôles

Nom du ModèleString

Identifiant principal utilisé pour compiler le modèle Mongoose et générer l'interface racine TypeScript Document.

Par défaut : ExampleModel
Horodatages automatiquesBoolean

Ajoute { timestamps: true } aux options du schéma pour gérer automatiquement les champs Date createdAt et updatedAt.

Par défaut : true
Stratégie Sous-documentsEnum (separate | inline)

Définit si les objets imbriqués sont extraits dans des sous-schémas enfants dédiés ou déclarés en tant qu'objets en ligne.

Par défaut : separate
Détection d'ObjectIdBoolean

Identifie automatiquement les chaînes hexadécimales de 24 caractères et leur associe le type mongoose.Schema.Types.ObjectId.

Par défaut : true
Nettoyage des chaînesBoolean

Applique trim: true à toutes les chaînes inférées pour supprimer automatiquement les espaces superflus en début et fin de chaîne.

Par défaut : true

Conseils de pro et bonnes practices

Fusion de schémas pour tableaux hétérogènes

Lors de la conversion d'un tableau contenant des objets aux attributs variables, le moteur calcule l'union structurelle complète afin de ne perdre aucun champ optionnel.

Optimisation BSON avec _id: false

Pour les tableaux d'objets imbriqués n'exigeant pas d'indexation ni de requêtes isolées, désactivez les identifiants avec { _id: false } afin de réduire l'empreinte mémoire.

Typage TypeScript Dual-Stack

Associez HydratedDocument<IModel> pour les opérations Mongoose avec l'interface brute en tant que DTO pour sécuriser vos échanges d'API de bout en bout.

Stratégie d'indexation et performances

Définissez directement { index: true } ou { unique: true } sur les chemins fréquemment interrogés (comme les adresses e-mail ou références externes).

Pièges courants et dépannage

Tableaux à types hétérogènes générant des erreurs de validation

Si un tableau mélange des types primitifs différents (ex : nombres et chaînes), déclarez le champ avec [mongoose.Schema.Types.Mixed] ou normalisez les données JSON en amont.

Dates ISO 8601 inférées en tant que simples chaînes String

Assurez-vous que vos chaînes temporelles respectent scrupuleusement la norme ISO 8601 (ex : 2026-10-17T00:00:00.000Z) pour être typées en mongoose.Schema.Types.Date.

Structures circulaires ou imbrications profondes provoquant une surcharge

Basculez vers la stratégie 'separate' pour découper les hiérarchies complexes en sous-schémas modulaires, ou aplatissez les références superflues.

Foire aux questions (FAQ)

Comment le générateur déduit-il les types Mongoose à partir du JSON ?▼

Le moteur inspecte les types primitifs JavaScript, exécute des expressions régulières pour identifier les dates ISO 8601 et les ObjectIds hexadécimaux de 24 caractères, puis explore récursivement tableaux et objets.

Quelle est la différence entre HydratedDocument et une interface TypeScript classique ?▼

Une interface TypeScript classique représente les données brutes (DTO), tandis que HydratedDocument<T> intègre les méthodes d'instance de Mongoose (.save(), .populate(), getters virtuels) et les propriétés système MongoDB.

Faut-il préférer les schémas enfants séparés aux objets en ligne ?▼

Les schémas enfants séparés sont recommandés lorsque les structures imbriquées nécessitent des validateurs spécifiques, des valeurs par défaut, des hooks de middleware ou doivent être réutilisées dans plusieurs modèles.

Est-il possible de personnaliser le nom de la collection MongoDB cible ?▼

Oui. Mongoose applique par défaut une mise au pluriel en minuscules, mais vous pouvez indiquer un nom de collection explicite en troisième paramètre de mongoose.model('Modele', Schema, 'collection_cible').

Mes données JSON sont-elles transmises à un serveur tiers ?▼

Non. L'analyse syntaxique du JSON, l'inférence des types BSON et la génération du code TypeScript s'effectuent à 100 % localement dans le bac à sable de votre navigateur sans aucun transfert réseau.

Outils et utilitaires connexes

Tous les outils →
Guide Développeur du Générateur de Schémas de Validation Yup depuis JSONDéveloppement

Transformez des exemples JSON en schémas de validation d'objets Yup typés avec yup.string(), yup.number(), yup.array() et règles requises.

Ouvrir l'outil→
Guide Développeur : Générateur de Schémas de Validation Joi depuis JSONDéveloppement

Convertissez des structures de données JSON en schémas de validation Joi robustes avec les contraintes Joi.object(), Joi.string(), Joi.number() et Joi.array().

Ouvrir l'outil→
Guide Développeur du Convertisseur JSON vers Schéma Apache Avro (.avsc)Développement

Convertissez des charges utiles JSON en schémas Apache Avro (.avsc) prêts pour la production, avec gestion des espaces de noms, types primitifs et logiques, champs union avec null et règles d'évolution.

Ouvrir l'outil→
Guide Développeur : Générateur de Schémas de Validation Zod depuis GraphQL SDLDéveloppement

Convertissez les types, requêtes et inputs GraphQL SDL en schémas de validation Zod à l'exécution (z.object, z.string, z.array) avec prise en charge avancée de la nullabilité.

Ouvrir l'outil→
Guide de développement du convertisseur GraphQL SDL vers types et interfaces TypeScriptDéveloppement

Transformez vos types, inputs et énumérations GraphQL SDL directement en interfaces et types TypeScript propres et sans dépendances.

Ouvrir l'outil→
K8S Configmap Secret Generator Référence DéveloppeurDéveloppement

Utilitaire de développement pour générer des manifestes Kubernetes ConfigMap et Secret avec encodage Base64, stringData, TLS, Docker registry auth et flags de ressources immuables.

Ouvrir l'outil→