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:
| documento | required: true | required: true, default: undefined |
|---|---|---|
{ tags: ["a"] } | passa | passa |
{ tags: [] } | passa | passa |
{} | passa | fallisce |
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.