Как проверить список в схеме mongodb?

1

Я создаю валидацию коллекции HOME, в которой у меня есть тип комнаты (double, single, ensuite), и валидация должна позволять добавлять все перечисленные элементы.

"rooms.type": {bsonType: ["ensuite", "double", "single"]},

Это то, что у меня есть в валидаторе

db.createCollection("home", { 
validator : {
    $jsonSchema : {
    bsonType: "object",
    required: ["address.line1", "address.town", "rooms.type", 
    "rooms.qty", "rooms.price"],
 properties: {
    "address.line1": {bsonType: "string"},
    "address.town": {bsonType: "string"},
    "rooms.type": {bsonType: ["ensuite", "double", "single"]},
    "rooms.qty": {bsonType: "int", minimum: 0},
    "rooms.price": {bsonType: ["double"], minimum: 0},
}}}})

Я получаю сообщение об ошибке

"ok" : 0,
"errmsg" : "Unknown type name alias: ensuite",
"code" : 2,
"codeName" : "BadValue"

Я ожидаю, что массив room.type разрешит один или все атрибуты в группе, указанной в схеме.

Теги:
jsonschema

2 ответа

0
Лучший ответ

Вы можете указать, что тип rooms.type должен быть "массивом" с минимальным 1 элементом в массиве и что каждый элемент этого массива должен быть перечислением следующим образом:

"rooms.type": {
    type: "array",
    minItems: 1,
    items: {
        enum: ["ensuite", "double", "single"]
    }
}

MongoDB имеет документацию по $ jsonSchema, но вы можете найти немного больше подробностей в спецификации валидации JSON-схемы, на которую ссылается документация MongoDB.

  • 1
    Спасибо за помощь; решение работает. Могу ли я спросить вас, где я могу найти больше информации, как это?
  • 1
    добавил пару ссылок, к сожалению, у них нет хороших примеров
0

Вы также можете указать схему следующим образом:

db.createCollection('home', {
  validator: {
    $jsonSchema: {
      bsonType: 'object',
      required: ['address', 'rooms'],
      properties: {
        address: {
          bsonType: 'object',
          additionalProperties: false,
          required: ['line1', 'town'],
          properties: {
            line1: {
              bsonType: 'string'
            },
            town: {
              bsonType: 'string'
            }
          }
        },
        rooms: {
          bsonType: 'object',
          additionalProperties: false,
          required: ['type', 'qty', 'price'],
          properties: {
            type: {
              bsonType: 'string',
              enum: ["ensuite", "double", "single"]
            },
            qty: {
              bsonType: 'int',
              minimum: 0
            },
            price: {
              bsonType: 'array',
              items: {
                bsonType: 'double',
                minimum: 0
              }
            }
          }
        }
      }
    }
  }
});

  • 0
    Спасибо, это хорошо определенная схема. Буду использовать в моем проекте.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню