Коллекции и таблицы SQL
Вы сопоставите коллекции MongoDB с реляционными таблицами и поймёте, как гибкая схема меняет проектирование данных.
«Коллекции и таблицы SQL» — бесплатный урок MongoDB Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения MongoDB Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс MongoDB Academy содержит 4 уроков всего.
Tables vs Collections at a Glance
Основной единицей в SQL является таблица, где каждая строка имеет одинаковые столбцы. В MongoDB это коллекция — группа документов, каждый из которых может отличаться от других.
Fixed Schema: The SQL Way
Для SQL требуется фиксированная схема, определяемая до внесения каких-либо данных, и её последующее изменение может привести к пересборке всей таблицы. Это жесткий, но предсказуемый и эффективный с точки зрения хранения данных подход.
-- SQL table: schema defined upfront, rigid
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(200) UNIQUE NOT NULL,
age INT,
created_at TIMESTAMP DEFAULT NOW()
);
-- Every row must have exactly these columnsFlexible Schema: The MongoDB Way
Коллекция MongoDB появляется в тот момент, когда вы вставляете в нее данные — схема не требуется. Эта гибкая схема отлично подходит для прототипирования, но ваш код должен уметь обрабатывать отсутствующие поля.
// No schema definition needed - collection created on first insert
db.users.insertOne({ name: 'Alice', email: 'alice@test.com', age: 30 });
// Next insert can have completely different fields
db.users.insertOne({ name: 'Bob', email: 'bob@test.com', company: 'Acme', role: 'admin' });
// Both documents live in the same 'users' collectionSchema vs Schema-Less: The Trade-Off
Ни один из вариантов не является безусловным победителем. Фиксированные схемы защищают от некорректных данных, а гибкие позволяют действовать быстро. Валидация JSON-схемы в MongoDB предлагает вам оптимальный компромисс.
Normalization vs Denormalization
SQL отдает предпочтение нормализации — разделению данных по таблицам. MongoDB отдает предпочтение денормализации — встраиванию связанных данных, чтобы считывать их все за один раз без использования JOIN.
// SQL normalized: address in separate table
// SELECT u.name, a.city FROM users u JOIN addresses a ON a.user_id = u.id
// MongoDB denormalized: address embedded in user document
{
_id: ObjectId('...'),
name: 'Alice',
address: { city: 'London', zip: 'EC1A' } // no JOIN needed
}Creating Collections Explicitly
Коллекции создаются автоматически, но createCollection позволяет задать параметры заранее — например, ограничение размера (capped collection) для логов или валидатор. В коде приведен пример.
// Create a capped collection explicitly
db.createCollection('appLogs', {
capped: true,
size: 10485760, // 10 MB maximum size
max: 50000 // optional: max 50,000 documents
});
// When full, oldest documents are automatically removedListing and Dropping Collections
Несколько удобных команд позволяют выводить список, подсчитывать количество и удалять коллекции. Чтобы очистить коллекцию, не удаляя её, используйте deleteMany — в MongoDB нет команды TRUNCATE. В коде они показаны.
// Useful collection management commands in mongosh
db.getCollectionNames();
// ['users', 'orders', 'products']
db.users.countDocuments({});
// 4823
db.users.stats().storageSize;
// 2097152 (bytes)
// Delete all documents but keep the collection:
db.users.deleteMany({});
// { acknowledged: true, deletedCount: 4823 }The _id Field and Primary Keys
В каждой коллекции в качестве первичного ключа используется _id, для которого автоматически создается уникальный индекс. Вы можете указать собственный _id — например, артикул товара (SKU), — при условии, что он будет уникальным.
// Custom _id values
db.products.insertOne({
_id: 'SKU-HEADPHONES-BLK-42', // string _id
name: 'Wireless Headphones Black',
price: 79.99
});
// Lookup by custom _id is O(log n) via the _id index
db.products.findOne({ _id: 'SKU-HEADPHONES-BLK-42' });Index Structure Differences
Как SQL, так и MongoDB используют B-дерево индексов, однако MongoDB также позволяет индексировать вложенные поля и элементы массивов. Таким образом, гибкие схемы не снижают скорость выполнения запросов.
// Index a nested field and an array field
db.users.createIndex({ 'address.city': 1 });
// Now queries on city use an index:
db.users.find({ 'address.city': 'Chicago' });
// Multikey index on array field - indexes each element
db.products.createIndex({ tags: 1 });
db.products.find({ tags: 'electronics' }); // uses multikey indexTransactions: Tables vs Collections
Начиная с версии 4.0, MongoDB поддерживает многодокументные транзакции. Однако за счет внедрения связанных данных в один документ часто можно добиться атомарных обновлений, вовсе не прибегая к ним.
// Single-document atomicity (always available)
// Updating order status and adding a tracking number
db.orders.updateOne(
{ _id: orderId },
{ $set: { status: 'shipped', trackingNumber: 'UPS123456' } }
);
// These two field updates happen atomically - no transaction neededWhen to Choose Tables Over Collections
Иногда SQL-таблицы — лучший выбор: стабильные схемы, сложные JOIN-запросы или строгая ссылочная целостность. Выбирайте подходящий инструмент, а не самый модный.
Quick Check
Проверьте свое понимание концепций MongoDB и баз данных NoSQL из этого урока.
Lesson Recap
Вы узнали, что коллекции не требуют строгой схемы, MongoDB встраивает связанные данные, чтобы избежать JOIN-запросов, а каждая коллекция автоматически индексирует _id. Далее: базы данных и пространства имен.
Часто задаваемые вопросы
Урок «Коллекции и таблицы SQL» бесплатный?
Да — полный текст урока «Коллекции и таблицы SQL» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс MongoDB Academy, подпишись на CoddyKit PRO. Курс MongoDB Academy содержит 4 уроков всего.
Чему я научусь в уроке «Коллекции и таблицы SQL»?
Вы сопоставите коллекции MongoDB с реляционными таблицами и поймёте, как гибкая схема меняет проектирование данных. Ты практикуешь MongoDB Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать MongoDB Academy?
Предыдущий опыт не требуется. MongoDB Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Коллекции и таблицы SQL»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке MongoDB Academy?
Да. Каждый урок MongoDB Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Что такое документ BSON?
- Коллекции и таблицы SQL
- Базы данных, коллекции и пространства имён
- Основы оболочки mongosh