Convertir JSON a un esquema Mongoose — Numio
Infiere una definición de esquema de Mongoose a partir de un documento JSON de ejemplo y la muestra como JSON. Los campos reciben String, Number, Boolean, Date, ObjectId o Mixed; los objetos anidados pasan a rutas anidadas y los arrays de objetos a esquemas de subdocumento.
Escribir el esquema de una colección de MongoDB existente a partir de un documento copiado de Compass o mongosh.
JSON
Mongoose Schema
Cuándo usarla
- Escribir el esquema de una colección de MongoDB existente a partir de un documento copiado de Compass o mongosh.
- Empezar un modelo de Node.js a partir de un payload de API de ejemplo que piensas almacenar.
Cómo usarla
- Pega un documento como JSON estricto, o un array de documentos; escribe los ObjectId y las fechas como cadenas simples en lugar de ObjectId() o ISODate().
- Revisa los tipos inferidos: las cadenas hex de 24 caracteres pasan a ObjectId y las cadenas ISO 8601 como 2024-05-01T08:00:00Z a Date.
- Copia el resultado en new mongoose.Schema({...}) y añade tú mismo las opciones required, default, index y ref.
Documento JSON
{
"_id": "64f1c2a9e1b2c3d4e5f60718",
"name": "Ada Lovelace",
"code": "A-1001",
"joinedAt": "2024-05-01T08:00:00Z",
"roles": ["admin", "editor"],
"addresses": [
{ "city": "London", "zip": "NW1" },
{ "city": "Paris", "zip": "75001", "primary": true }
],
"profile": { "bio": "Mathematician", "website": null }
}Schema de Mongoose (JSON)
{
"_id": {
"type": "ObjectId"
},
"name": {
"type": "String"
},
"code": {
"type": "String"
},
"joinedAt": {
"type": "Date"
},
"roles": {
"type": [
"String"
]
},
"addresses": {
"type": [
{
"city": {
"type": "String"
},
…Detalles y limitaciones
Lo infiere en el navegador el generador propio del sitio; el documento no se envía a ningún servidor.
Solo las fechas ISO 8601 (2024-05-01, opcionalmente con hora y desfase) reciben tipo Date, así que códigos como "A-1001" o "12" siguen siendo String.
Los arrays de objetos pasan a un esquema de subdocumento construido a partir de todos los elementos, como "type": [{ "city": ... }]. Los arrays vacíos pasan a Array y null a Mixed.
Los campos obligatorios, los valores por defecto, los índices y las refs no se pueden inferir de los datos, y los campos ausentes en tu muestra faltan en el esquema.
FAQ
¿Puedo convertir un array JSON de documentos?
Sí. Los documentos se fusionan, así que todos los campos que aparecen en cualquiera de ellos están en el esquema. Un campo con tipos distintos entre documentos pasa a Mixed.
¿Por qué los tipos van entre comillas, como "String"?
La salida es JSON, así que los nombres de tipo son cadenas. En JavaScript puedes usar los constructores globales String, Number, Boolean y Date y Schema.Types.ObjectId y Schema.Types.Mixed.
¿Cómo se trata _id?
Como cualquier otro campo: una cadena hex de 24 caracteres recibe tipo ObjectId. Elimina _id si quieres que Mongoose lo añada automáticamente.