100 % local — seus dados nunca saem do seu navegador

JSON para Mongoose — um arquivo de modelo pronto

Transforme uma amostra JSON num esquema do Mongoose. Um esquema por objeto, obrigatório onde a amostra mostra um valor, pronto para exportar como modelo.

Instantâneo Privado Zero cookies

Entrada JSON

Saída Mongoose

O que esta ferramenta faz

Uma amostra JSON vira um esquema Mongoose, um const por objeto, e um modelo no fim.

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

Os filhos primeiro: esquemas são valores de execução, um precisa existir antes que outro o use. Um array de documentos na raiz descreve o seu primeiro elemento — é ele a forma do registro, e a lista já é o que a coleção é.

required num array precisa de ajuda

O Mongoose dá a todo array o padrão []. Um campo declarado { type: [String], required: true } valida portanto mesmo sem a chave: o padrão satisfaz a exigência. Conferido no Mongoose 9:

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

A primeira coluna não diz o que a palavra promete. Os campos de array são por isso emitidos com default: undefined ao lado de required: true, para que um array ausente seja o erro que ele afirma ser. Um array vazio continua passando, e é justo: é um valor.

Objetos aninhados viram subdocumentos, com o seu próprio _id

O address acima é um subdocumento, e o Mongoose lhe dá um _id próprio:

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

É o padrão do Mongoose, não um acréscimo daqui. Se esses identificadores internos forem ruído para você, new mongoose.Schema({ … }, { _id: false }) os remove — uma decisão sobre os seus documentos, e por isso deixada com você.

Um export do MongoDB não é o JSON que você quer

O mongoexport escreve JSON estendido:

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

São objetos: o gerador faz esquemas de subdocumento com eles, e _id acaba como subdocumento carregando o seu próprio _id, o que certamente não era a intenção. Troque-os à mão por mongoose.Schema.Types.ObjectId e Date. Uma chave chamada $oid diz algo ao MongoDB e nada a um leitor de estruturas.

Mixed é onde a amostra se calou

null, um valor desconhecido, um array vazio e um array heterogêneo dão todos mongoose.Schema.Types.Mixed. Um campo Mixed não é validado e, bom saber, suas mudanças não são rastreadas automaticamente: é preciso chamar markModified. Estreite-o assim que souber o que deve estar ali.

Privado por padrão

Tudo é executado localmente no seu navegador com JavaScript. Os seus dados nunca são enviados para um servidor, o que torna a ferramenta segura para conteúdo sensível e funciona offline.

Perguntas frequentes

Por que os campos de array levam `default: undefined`?
Porque sem isso o `required: true` num array não faz nada. O Mongoose dá a todo array o padrão `[]`, então um documento sem a chave valida assim mesmo: o padrão satisfaz a exigência. Acrescentar `default: undefined` faz o campo se comportar como a palavra «obrigatório» se lê. Conferido no Mongoose 9, não suposto.
Meu objeto aninhado ganhou um `_id`. De onde vem?
Do Mongoose: um esquema aninhado usado como tipo de campo é um subdocumento, e subdocumentos recebem o seu próprio `_id` por padrão. Se você não quer, passe `{ _id: false }` nas opções do esquema. Ele fica porque é o padrão do Mongoose, e tirá-lo em silêncio mudaria a cara dos seus documentos.
Colei um export do MongoDB e vieram campos `$oid`. Está certo?
É o que a amostra continha. Um documento do `mongoexport` vem em JSON estendido — `{"_id": {"$oid": "…"}}`, `{"$date": "…"}` — então o gerador vê objetos e faz subdocumentos deles. Troque-os por `mongoose.Schema.Types.ObjectId` e `Date`: a ferramenta não tem como conhecer a convenção por trás de uma chave que nunca viu.

Conversores relacionados