Pular para o conteúdo

Converter JSON em esquema Mongoose — Numio

Infere uma definição de esquema Mongoose a partir de um documento JSON de exemplo e a exibe como JSON. Os campos recebem String, Number, Boolean, Date, ObjectId ou Mixed; objetos aninhados viram caminhos aninhados e arrays de objetos viram esquemas de subdocumento.

Escrever o esquema de uma coleção MongoDB existente a partir de um documento copiado do Compass ou do mongosh.

JSON

Mongoose Schema

Quando usar

  • Escrever o esquema de uma coleção MongoDB existente a partir de um documento copiado do Compass ou do mongosh.
  • Começar um modelo Node.js a partir de um payload de API de exemplo que você pretende armazenar.

Como usar

  1. Cole um documento como JSON estrito, ou um array de documentos; escreva ObjectIds e datas como strings simples em vez de ObjectId() ou ISODate().
  2. Confira os tipos inferidos: strings hex de 24 caracteres viram ObjectId e strings ISO 8601 como 2024-05-01T08:00:00Z viram Date.
  3. Copie o resultado para new mongoose.Schema({...}) e adicione você mesmo as opções required, default, index e 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 }
}

Esquema Mongoose (JSON)

{
  "_id": {
    "type": "ObjectId"
  },
  "name": {
    "type": "String"
  },
  "code": {
    "type": "String"
  },
  "joinedAt": {
    "type": "Date"
  },
  "roles": {
    "type": [
      "String"
    ]
  },
  "addresses": {
    "type": [
      {
        "city": {
          "type": "String"
        },
…

Detalhes e limitações

Inferido no navegador pelo gerador próprio do site; o documento não é enviado a um servidor.

Só datas ISO 8601 (2024-05-01, opcionalmente com hora e fuso) são tipadas como Date, então códigos como "A-1001" ou "12" continuam String.

Arrays de objetos viram um esquema de subdocumento construído a partir de todos os itens, como "type": [{ "city": ... }]. Arrays vazios viram Array e null vira Mixed.

Campos obrigatórios, padrões, índices e refs não podem ser inferidos dos dados, e campos ausentes da sua amostra ficam de fora do esquema.

FAQ

Posso converter um array JSON de documentos?

Sim. Os documentos são mesclados, então todo campo que aparece em qualquer um deles está no esquema. Um campo com tipos diferentes entre documentos vira Mixed.

Por que os tipos estão entre aspas, como "String"?

A saída é JSON, então os nomes de tipo são strings. Em JavaScript você pode usar os construtores globais String, Number, Boolean e Date e Schema.Types.ObjectId e Schema.Types.Mixed.

Como o _id é tratado?

Como qualquer outro campo: uma string hex de 24 caracteres é tipada como ObjectId. Remova _id se quiser que o Mongoose o adicione automaticamente.

Especificações e referências