Создать коллекцию MongoDB со стандартной схемой JSON - PullRequest
0 голосов
/ 26 мая 2020

Я хочу создать коллекцию MongoDB с использованием файла схемы JSON.

Предположим, что JSON файл address.schema.json содержит схему адресной информации ( этот файл является одним из Json Примеры -schema.org ):

{
  "$id": "https://example.com/address.schema.json",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "An address similar to http://microformats.org/wiki/h-card",
  "type": "object",
  "properties": {
    "post-office-box": {
      "type": "string"
    },
    "extended-address": {
      "type": "string"
    },
    "street-address": {
      "type": "string"
    },
    "locality": {
      "type": "string"
    },
    "region": {
      "type": "string"
    },
    "postal-code": {
      "type": "string"
    },
    "country-name": {
      "type": "string"
    }
  },
  "required": [ "locality", "region", "country-name" ],
  "dependencies": {
    "post-office-box": [ "street-address" ],
    "extended-address": [ "street-address" ]
  }
}

Что такое команда MongoDB, например mongoimport или db.createCollection для создания коллекции MongoDB с использованием приведенная выше схема?

Было бы неплохо, если бы я мог использовать файл непосредственно в MongoDB с необходимостью изменения формата файла вручную.

Интересно, является ли формат схемы JSON стандартным, зачем мне его менять, чтобы принять для MongoDB. Почему MongoDB не имеет встроенной функции?

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

Вы можете создать его с помощью команды createCollection или помощника оболочки:

db.createCollection(
    "mycollection", 
    {validator:{$jsonSchema:{
        "description": "An address similar to http://microformats.org/wiki/h-card",
        "type": "object",
        "properties": {
           "post-office-box": {       "type": "string"     },
           "extended-address": {       "type": "string"     },
           "street-address": {       "type": "string"     },
           "locality": {       "type": "string"     },
           "region": {       "type": "string"     },
           "postal-code": {       "type": "string"     },
           "country-name": {       "type": "string"     } 
        },
        "required": [ "locality", "region", "country-name" ],
        "dependencies": {
            "post-office-box": [ "street-address" ],
            "extended-address": [ "street-address" ]
        } 
  }}})

Вам нужно только указать bsonType вместо type, если вы хотите использовать тип, который существует в bson но не в общей схеме c json. Вам необходимо удалить строки $id и $schema, поскольку они не поддерживаются поддержкой схемы MongoDB JSON ( задокументировано здесь )

0 голосов
/ 26 мая 2020

Единственный вариант, который вы можете использовать, - это добавить валидатор jsonSchema во время создания коллекции: https://docs.mongodb.com/manual/reference/operator/query/jsonSchema/#document -validator . Это будет означать, что любой документ, который вы вставляете / обновляете в свою коллекцию, должен соответствовать предоставленной схеме

...