Проверка типа элементов массива в MongoDB

Я использую MongoDB 4.0.

В документах из моей коллекции может быть поле numbers, содержащее массив целых чисел. Мы можем подтвердить, что numbers действительно является массивом, используя приведенный ниже код, но можно ли убедиться, что они целые числа?

properties: {
  numbers: {
    bsonType: 'array'
  }
 }

Я смотрел документы проверки и Документы типа BSON, но ни один из них ничего не говорит об этом. В одном примере показано поле, заключенное в квадратные скобки (["double"]), но этот тип не описывается как массив, и добавление скобок не имеет никакого эффекта.

Синтаксис ["double"] указывает, что может быть подходящим более одного типа. Тип ["double","string"] допускает двойные и строковые значения как допустимые типы. Я согласен, что это сбивает с толку при работе с типом массива.

WillD 15.03.2019 23:32
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
1
585
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Кажется, есть еще один атрибут, items, где вы определяете схему для элементов в массиве.

properties: {
  numbers: {
    bsonType: 'array'
    items: {
      bsonType: 'int'
    }
  }
}

Этот атрибут кажется быть из монго 3.6

Это действительно работает? Я пробую этот синтаксис, и документ не будет проверяться, если массив не будет пустым (что является допустимым). Если у меня [200,300] он признан недействительным ...

WillD 15.03.2019 23:01

Да, это так. но при использовании оболочки mongo целые числа должны быть явно преобразованы с помощью NumberInt (), поскольку оболочка по умолчанию устанавливает все числа в два раза. Список вещей, которые я ненавижу в монго, растет ...

WillD 15.03.2019 23:44

Вам нужен символ "," после "array", например:

properties: {
  numbers: {
    bsonType: 'array' ,
    items: {
      bsonType: 'int'
    }
  }
}

Я не вижу разницы между принятый ответ и вашим, пожалуйста, избегайте ответов с уже предложенным решением.

Ruli 15.01.2021 08:58

@Ruli Он не предлагает решения; он говорит, что принятый ответ требует наличия запятой между записями BSON, чтобы быть синтаксически правильным. Одна из причуд Stack Overflow - требования к репутации для комментариев выше, чем для ответов. Отметьте как «не ответ», и моды позаботятся об этом.

Matt 15.01.2021 16:29

Другие вопросы по теме