MongoDB: создание коллекции

В этой главе мы расскажем, как использовать MongoDB для создания коллекций.

В MongoDB для создания коллекции используйте методcreateCollection().

Формат синтаксиса:

db.createCollection(name, options)

Описание параметра:

  • name: имя создаваемой коллекции.
  • options: необязательные параметры, задающие опции, касающиеся размера памяти и индексов.

options может принимать следующие параметры:

Имя параметраTypeОписаниеПример значения
cappedBooleanСоздавать ли коллекцию с ограниченным размером.true
sizeNumberМаксимальный размер коллекции (в байтах). Допустимо только еслиcappedимеет значение true.10485760 (10MB)
maxNumberМаксимальное количество документов, допустимых в коллекции. Допустимо только еслиcappedимеет значение true.5000
validatorObjectВыражение, используемое для валидации документов.{ $jsonSchema: { ... }}
validationLevelStringЗадаёт уровень строгости валидации документов.
"off": Без валидации.
"strict": Как операции вставки, так и операции обновления должны проходить валидацию (по умолчанию).
"moderate": Только обновления существующих документов должны проходить валидацию; новые вставки документов не нуждаются в ней.
"strict"
validationActionStringЗадаёт действие, которое следует предпринять при сбое валидации документов.
"error": Блокирует вставку или обновление (по умолчанию).
"warn": Разрешает вставку или обновление, но выдаёт предупреждение.
"error"
storageEngineObjectЗадаёт конфигурацию механизма хранения для коллекции.{ wiredTiger: { ... }}
collationObjectЗадаёт параметры сортировки по умолчанию для коллекции.{ locale: "en", strength: 2 }

При вставке документов MongoDB сначала проверяет поле size коллекции с фиксированным размером, а затем поле max.

Пример создания коллекции с использованием этих параметров:

Пример

db.createCollection("myComplexCollection", {
  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 — неотрицательным целым числом.

Пример

db.createCollection("myCollection", {
  validator: { $jsonSchema: {
    bsonType: "object",
    required: ["name", "age"],
    properties: {
      name: {
        bsonType: "string",
        description: "Должно быть строкой и обязательно"
      },
      age: {
        bsonType: "int",
        minimum: 0,
        description: "Должно быть целым числом и является обязательным"
      }
    }
  }}
});
Другие расширения