Я использую MongoDB 4.0.
В документах из моей коллекции может быть поле numbers, содержащее массив целых чисел. Мы можем подтвердить, что numbers действительно является массивом, используя приведенный ниже код, но можно ли убедиться, что они целые числа?
properties: {
numbers: {
bsonType: 'array'
}
}
Я смотрел документы проверки и Документы типа BSON, но ни один из них ничего не говорит об этом. В одном примере показано поле, заключенное в квадратные скобки (["double"]), но этот тип не описывается как массив, и добавление скобок не имеет никакого эффекта.

Кажется, есть еще один атрибут, items, где вы определяете схему для элементов в массиве.
properties: {
numbers: {
bsonType: 'array'
items: {
bsonType: 'int'
}
}
}
Этот атрибут кажется быть из монго 3.6
Это действительно работает? Я пробую этот синтаксис, и документ не будет проверяться, если массив не будет пустым (что является допустимым). Если у меня [200,300] он признан недействительным ...
Да, это так. но при использовании оболочки mongo целые числа должны быть явно преобразованы с помощью NumberInt (), поскольку оболочка по умолчанию устанавливает все числа в два раза. Список вещей, которые я ненавижу в монго, растет ...
Вам нужен символ "," после "array", например:
properties: {
numbers: {
bsonType: 'array' ,
items: {
bsonType: 'int'
}
}
}
Я не вижу разницы между принятый ответ и вашим, пожалуйста, избегайте ответов с уже предложенным решением.
@Ruli Он не предлагает решения; он говорит, что принятый ответ требует наличия запятой между записями BSON, чтобы быть синтаксически правильным. Одна из причуд Stack Overflow - требования к репутации для комментариев выше, чем для ответов. Отметьте как «не ответ», и моды позаботятся об этом.
Синтаксис
["double"]указывает, что может быть подходящим более одного типа. Тип["double","string"]допускает двойные и строковые значения как допустимые типы. Я согласен, что это сбивает с толку при работе с типом массива.