100 % local: tus datos nunca salen de tu navegador

JSON a Mongoose — un archivo de modelo listo

Convierte una muestra JSON en un esquema de Mongoose. Un esquema por objeto, requerido donde la muestra enseña un valor, listo para exportar como modelo.

Instantáneo Privado Cero cookies

Entrada JSON

Salida Mongoose

Qué hace esta herramienta

Una muestra JSON pasa a ser un esquema de Mongoose, un const por objeto, y un modelo al final.

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

Los hijos primero: los esquemas son valores de ejecución, uno debe existir antes de que otro lo use. Un array de documentos en la raíz describe su primer elemento: esa es la forma del registro, y la lista ya es lo que la colección es.

required en un array necesita ayuda

Mongoose da a todo array el valor por defecto []. Un campo declarado { type: [String], required: true } valida por tanto incluso sin la clave: el defecto satisface la exigencia. Comprobado en Mongoose 9:

documentorequired: truerequired: true, default: undefined
{ tags: ["a"] }pasapasa
{ tags: [] }pasapasa
{}pasafalla

La primera columna no dice lo que la palabra promete. Los campos de array se emiten por eso con default: undefined junto a required: true, para que un array ausente sea el error que dice ser. Un array vacío sigue pasando, y es justo: es un valor.

Los objetos anidados pasan a subdocumentos, con su propio _id

address de arriba es un subdocumento, y Mongoose le da un _id propio:

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

Es el comportamiento por defecto de Mongoose, no un añadido de aquí. Si esos identificadores internos te sobran, new mongoose.Schema({ … }, { _id: false }) los quita: una decisión sobre tus documentos, y por eso se te deja a ti.

Un export de MongoDB no es el JSON que quieres

mongoexport escribe JSON extendido:

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

Son objetos: el generador hace esquemas de subdocumento con ellos, y _id acaba siendo un subdocumento con su propio _id, que desde luego no es lo que querías. Sustitúyelos a mano por mongoose.Schema.Types.ObjectId y Date. Una clave llamada $oid significa algo para MongoDB y nada para un lector de estructuras.

Mixed es donde la muestra se calló

null, un valor desconocido, un array vacío y un array heterogéneo dan todos mongoose.Schema.Types.Mixed. Un campo Mixed no se valida y, conviene saberlo, sus cambios no se siguen automáticamente: hay que llamar a markModified. Estréchalo en cuanto sepas qué debe ir ahí.

Privado por diseño

Todo se ejecuta localmente en tu navegador con JavaScript. Tus datos nunca se suben a un servidor, lo que hace que la herramienta sea segura para contenido sensible y funcione sin conexión.

Preguntas frecuentes

¿Por qué los arrays llevan `default: undefined`?
Porque sin eso, `required: true` en un array no hace nada. Mongoose da a todo array un valor por defecto `[]`, así que un documento sin la clave valida igual: el defecto satisface la exigencia. Añadir `default: undefined` hace que el campo se comporte como se lee la palabra «requerido». Comprobado en Mongoose 9, no supuesto.
Mi objeto anidado ganó un `_id`. ¿De dónde sale?
De Mongoose: un esquema anidado usado como tipo de campo es un subdocumento, y los subdocumentos reciben su propio `_id` por defecto. Si no lo quieres, pasa `{ _id: false }` en las opciones del esquema. Se deja porque es el comportamiento por defecto de Mongoose, y quitarlo en silencio cambiaría el aspecto de tus documentos.
Pegué un export de MongoDB y salieron campos `$oid`. ¿Es correcto?
Es lo que traía la muestra. Un documento de `mongoexport` va en JSON extendido —`{"_id": {"$oid": "…"}}`, `{"$date": "…"}`—, así que el generador ve objetos y hace subdocumentos de ellos. Sustitúyelos por `mongoose.Schema.Types.ObjectId` y `Date`: la herramienta no puede conocer la convención tras una clave que nunca ha visto.

Convertidores relacionados