100 % locale — i tuoi dati non lasciano mai il tuo browser

JSON in Mongoose — un file modello pronto

Trasforma un campione JSON in uno schema Mongoose. Uno schema per oggetto, richiesto dove il campione mostra un valore, pronto da esportare come modello.

Istantaneo Privato Zero cookie

Input JSON

Output Mongoose

Che cosa fa questo strumento

Un campione JSON diventa uno schema Mongoose, un const per oggetto, e un modello alla fine.

{ "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);

Prima i figli: gli schemi sono valori a runtime, uno deve esistere prima che un altro lo usi. Un array di documenti alla radice descrive il suo primo elemento — è quella la forma del record, e la lista è già ciò che la collezione è.

required su un array ha bisogno di aiuto

Mongoose dà a ogni array il default []. Un campo dichiarato { type: [String], required: true } valida quindi anche senza la chiave: il default soddisfa l’obbligo. Verificato su Mongoose 9:

documentorequired: truerequired: true, default: undefined
{ tags: ["a"] }passapassa
{ tags: [] }passapassa
{}passafallisce

La prima colonna non dice ciò che la parola promette. I campi array sono perciò emessi con default: undefined accanto a required: true, così che un array mancante sia l’errore che dichiara di essere. Un array vuoto continua a passare, ed è giusto: è un valore.

Gli oggetti annidati diventano sottodocumenti, con il loro _id

address qui sopra è un sottodocumento, e Mongoose gli dà un _id suo:

{ _id: ObjectId("…"), address: { city: "Paris", _id: ObjectId("…") } }

È il default di Mongoose, non un’aggiunta di qui. Se quegli identificatori interni sono rumore per te, new mongoose.Schema({ … }, { _id: false }) li toglie — una decisione sui tuoi documenti, ed è per questo che resta a te.

Un export di MongoDB non è il JSON che vuoi

mongoexport scrive JSON esteso:

{ "_id": { "$oid": "65f1c…" }, "created": { "$date": "2026-01-01T00:00:00Z" } }

Sono oggetti: il generatore ne fa schemi di sottodocumento, e _id finisce come sottodocumento con un proprio _id, che di certo non era l’intenzione. Sostituiscili a mano con mongoose.Schema.Types.ObjectId e Date. Una chiave di nome $oid significa qualcosa per MongoDB e nulla per un lettore di strutture.

Mixed è dove il campione ha taciuto

null, un valore ignoto, un array vuoto e un array eterogeneo danno tutti mongoose.Schema.Types.Mixed. Un campo Mixed non viene validato e, bene saperlo, le sue modifiche non sono tracciate automaticamente: bisogna chiamare markModified. Restringilo appena sai che cosa deve starci.

Privato per progettazione

Tutto viene eseguito localmente nel browser con JavaScript. I tuoi dati non vengono mai caricati, quindi lo strumento è sicuro per contenuti sensibili e funziona anche offline.

Domande frequenti

Perché i campi array portano `default: undefined`?
Perché senza, `required: true` su un array non fa nulla. Mongoose dà a ogni array il default `[]`, quindi un documento senza la chiave valida lo stesso: il default soddisfa l’obbligo. Aggiungere `default: undefined` fa sì che il campo si comporti come la parola «obbligatorio» suggerisce. Verificato su Mongoose 9, non supposto.
Il mio oggetto annidato ha guadagnato un `_id`. Da dove viene?
Da Mongoose: uno schema annidato usato come tipo di campo è un sottodocumento, e i sottodocumenti ricevono un `_id` proprio per default. Se non lo vuoi, passa `{ _id: false }` nelle opzioni dello schema. Resta perché è il default di Mongoose, e toglierlo in silenzio cambierebbe l’aspetto dei tuoi documenti.
Ho incollato un export di MongoDB e sono usciti campi `$oid`. È giusto?
È ciò che conteneva il campione. Un documento di `mongoexport` è JSON esteso — `{"_id": {"$oid": "…"}}`, `{"$date": "…"}` — quindi il generatore vede oggetti e ne fa sottodocumenti. Sostituiscili con `mongoose.Schema.Types.ObjectId` e `Date`: lo strumento non può conoscere la convenzione dietro una chiave che non ha mai visto.

Convertitori correlati