Схема JSON, которую вы предоставили, выглядит не совсем правильно. Ошибка в неизвестном ключевом слове "geometry" заключается в том, что этот атрибут должен описывать одно из ваших свойств. Структура файла схемы JSON является жесткой и имеет жесткую (но, по общему признанию, запутанную) спецификацию c.
Я вижу несколько ошибок в предоставленной вами схеме:
- Массив свойств
required
должен содержать ключи в объекте properties
. Так что в вашем случае это должно быть что-то вроде required: ["Name", "Country", "geometry"]
- Объекты
geometry
, datePosted
и image
должны быть размещены внутри объекта properties
. - Само описание объекта
geometry
должно быть другой схемой JSON (это рекурсивный шаблон). - Что такое тип геометрии? Вы определили его как строку и как перечисление только с одной возможной опцией («Точка»). Enum имеет смысл, только если вы предоставите несколько опций, и их значения заменит указанный тип данных.
Приведенный ниже код протестирован на MongoDB Compass:
{
$jsonSchema: {
bsonType: 'object',
required: [
'properties.Name',
'properties.Country',
'geometry.type',
'geometry.coordinates'
],
properties: {
Country: {
bsonType: 'string',
description: 'Must be supplied'
},
Name: {
bsonType: 'string',
description: 'Must be supplied'
},
description: {
bsonType: 'string',
description: 'Optional description'
},
geometry: {
type: 'object',
properties: {
type: {
'enum': [
'Point'
],
description: 'Must be Point'
},
coordinates: {
bsonType: [
'object'
],
description: 'Contains Longitude, Latitude',
properties: {
longitude: {
type: 'number',
description: 'Decimal representation of longitude'
},
latitude: {
type: 'number',
description: 'Decimal representation of latitude'
}
}
}
}
},
datePosted: {
bsonType: 'date',
description: 'Auto-added field'
},
image: {
bsonType: 'string',
description: 'URL of image location'
}
}
}
}
Посмотрите на пример в документации: https://docs.mongodb.com/manual/core/schema-validation/