Перейти к содержимому

Преобразователь JSON в схему Mongoose — Numio

Выводит определение схемы Mongoose из примера JSON-документа и выдаёт его в виде JSON. Поля получают String, Number, Boolean, Date, ObjectId или Mixed; вложенные объекты становятся вложенными путями, а массивы объектов — схемами поддокументов.

Написать схему для существующей коллекции MongoDB по документу, скопированному из Compass или mongosh.

JSON

Mongoose Schema

Когда пригодится

  • Написать схему для существующей коллекции MongoDB по документу, скопированному из Compass или mongosh.
  • Начать модель Node.js с примера payload API, который вы собираетесь хранить.

Как пользоваться

  1. Вставьте документ в строгом JSON или массив документов; записывайте ObjectId и даты обычными строками, а не ObjectId() или ISODate().
  2. Проверьте выведенные типы: 24-символьные hex-строки становятся ObjectId, а строки ISO 8601 вроде 2024-05-01T08:00:00Z — Date.
  3. Скопируйте результат в new mongoose.Schema({...}) и сами добавьте опции required, default, index и ref.

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 }
}

Схема Mongoose (JSON)

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

Подробности и ограничения

Выводится в браузере собственным генератором сайта; документ на сервер не отправляется.

Тип Date получают только даты ISO 8601 (2024-05-01, опционально со временем и смещением), поэтому коды вроде "A-1001" или "12" остаются String.

Массивы объектов становятся схемой поддокумента, построенной по всем элементам, например "type": [{ "city": ... }]. Пустые массивы становятся Array, null — Mixed.

Обязательные поля, значения по умолчанию, индексы и ref нельзя вывести из данных, а поля, которых нет в вашем примере, отсутствуют и в схеме.

FAQ

Можно ли преобразовать JSON-массив документов?

Да. Документы объединяются, поэтому в схеме есть каждое поле, встречающееся хотя бы в одном из них. Поле с разными типами в разных документах становится Mixed.

Почему типы в кавычках, например "String"?

Результат — JSON, поэтому имена типов являются строками. В JavaScript можно использовать глобальные конструкторы String, Number, Boolean и Date, а также Schema.Types.ObjectId и Schema.Types.Mixed.

Как обрабатывается _id?

Как любое другое поле: 24-символьная hex-строка получает тип ObjectId. Удалите _id, если хотите, чтобы Mongoose добавлял его автоматически.

Спецификации и справка