MongoDB: создание коллекции
В этой главе мы расскажем, как использовать MongoDB для создания коллекций.
В MongoDB для создания коллекции используйте методcreateCollection().
Формат синтаксиса:
db.createCollection(name, options)
Описание параметра:
- name: имя создаваемой коллекции.
- options: необязательные параметры, задающие опции, касающиеся размера памяти и индексов.
options может принимать следующие параметры:
| Имя параметра | Type | Описание | Пример значения |
|---|---|---|---|
capped | Boolean | Создавать ли коллекцию с ограниченным размером. | true |
size | Number | Максимальный размер коллекции (в байтах). Допустимо только еслиcappedимеет значение true. | 10485760 (10MB) |
max | Number | Максимальное количество документов, допустимых в коллекции. Допустимо только еслиcappedимеет значение true. | 5000 |
validator | Object | Выражение, используемое для валидации документов. | { $jsonSchema: { ... }} |
validationLevel | String | Задаёт уровень строгости валидации документов."off": Без валидации."strict": Как операции вставки, так и операции обновления должны проходить валидацию (по умолчанию)."moderate": Только обновления существующих документов должны проходить валидацию; новые вставки документов не нуждаются в ней. | "strict" |
validationAction | String | Задаёт действие, которое следует предпринять при сбое валидации документов."error": Блокирует вставку или обновление (по умолчанию)."warn": Разрешает вставку или обновление, но выдаёт предупреждение. | "error" |
storageEngine | Object | Задаёт конфигурацию механизма хранения для коллекции. | { wiredTiger: { ... }} |
collation | Object | Задаёт параметры сортировки по умолчанию для коллекции. | { locale: "en", strength: 2 } |
При вставке документов MongoDB сначала проверяет поле size коллекции с фиксированным размером, а затем поле max.
Пример создания коллекции с использованием этих параметров:
Пример
capped: true,
size: 10485760,
max: 5000,
validator: { $jsonSchema: {
bsonType: "object",
required: ["name", "email"],
properties: {
name: {
bsonType: "string",
description: "Должно быть строкой и обязательно"
},
email: {
bsonType: "string",
pattern: "^.+@.+$",
description: "Должен быть действительным адресом электронной почты"
}
}
}},
validationLevel: "strict",
validationAction: "error",
storageEngine: {
wiredTiger: { configString: "block_compressor=zstd" }
},
collation: { locale: "en", strength: 2 }
});
В этом примере создается коллекция со следующими характеристиками:
- Capped, максимальный размер 10MB, может хранить до 5000 документов.
- Документы должны содержать
nameиemailполя, гдеnameдолжно быть строкой,emailдолжен быть в допустимом формате электронной почты. - Уровень валидации — strict; при сбое валидации вставка или обновление будут заблокированы.
- Использует механизм хранения WiredTiger, блочный компрессор установлен на zstd.
- Использует английскую коллацию по умолчанию.
Пример
Создайте коллекцию-пример в базе данных test:
> use test
switched to db test
> db.createCollection("example")
{ "ok" : 1 }
>
Чтобы просмотреть существующие коллекции, можно использовать командуshow collectionsилиshow tables:
> show collections example system.indexes
Ниже показано использование createCollection() с несколькими ключевыми параметрами:
Создана capped-коллекция с максимальным размером 5MB (5,242,880 байт) и до 5,000 документов.
db.createCollection("myCappedCollection", { capped: true, size: 5242880, max: 5000 });
В MongoDB не нужно создавать коллекцию. Когда вы вставляете документы, MongoDB автоматически создаёт коллекцию.
> db.mycol2.insert({"name" : "Example"})
> show collections
mycol2
...
Создана capped-коллекция с максимальным размером 1MB (1,048,576 байт):
db.createCollection("myCappedCollection", { capped: true, size: 1048576 });
В следующем примере создаётся валидатор для коллекции myCollection, требующий, чтобы документы обязательно имели поля name и age, name был строкой, а age — неотрицательным целым числом.
Пример
validator: { $jsonSchema: {
bsonType: "object",
required: ["name", "age"],
properties: {
name: {
bsonType: "string",
description: "Должно быть строкой и обязательно"
},
age: {
bsonType: "int",
minimum: 0,
description: "Должно быть целым числом и является обязательным"
}
}
}}
});