Базы данных, коллекции и пространства имён
Вы создадите базу данных, добавите коллекции и поймёте, как MongoDB организует данные на уровне пространства имён.
«Базы данных, коллекции и пространства имён» — бесплатный урок MongoDB Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения MongoDB Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс MongoDB Academy содержит 4 уроков всего.
MongoDB's Three-Level Hierarchy
MongoDB вкладывает данные на трех уровнях: база данных, коллекция, документ. Это соответствует структуре SQL: база данных, таблица, строка, при этом один сервер может содержать множество элементов каждого типа.
What Is a Namespace?
Пространство имен (namespace) определяет коллекцию, объединяя имя базы данных и имя коллекции через точку, например myapp.users. Вы увидите это обозначение в логах и выводе команды explain.
// Namespace: database.collection
// 'shop' database, 'products' collection:
use shop
db.products.find({})
// MongoDB internally refers to this as 'shop.products'
// You can also reference it explicitly:
db.getSiblingDB('shop').getCollection('products').find({})Switching and Creating Databases
В mongosh команда use переключает базы данных. Команды CREATE DATABASE не существует — MongoDB создает базу данных лениво, в момент вставки вашего первого документа. Код это демонстрирует.
// Switch to (or create) a database
use myNewApp
// 'myNewApp' doesn't exist yet - no error, but not visible in 'show dbs'
// Insert a document to materialize the database
db.users.insertOne({ name: 'Alice' });
// Now 'myNewApp' appears:
show dbs
// admin 0.000GB
// local 0.000GB
// myNewApp 0.000GBSystem Databases: admin, local, config
В MongoDB есть три системные базы данных: admin — для пользователей и ролей, local — для данных репликации и config — для метаданных шардированного кластера. Полезно знать, что они существуют, и не трогать их.
// View all databases on the server
show dbs
// admin 0.000GB
// config 0.000GB
// local 0.004GB
// shop 0.012GB
// myapp 0.008GB
// List databases programmatically
db.adminCommand({ listDatabases: 1 });Creating Collections Explicitly
Используйте createCollection, когда вам заранее требуются особые параметры — ограниченный размер (capped), временные ряды (time-series), кластеризация или валидатор схемы. В этом коде создается коллекция с правилами валидации.
// Create a collection with a JSON Schema validator
db.createCollection('products', {
validator: {
$jsonSchema: {
bsonType: 'object',
required: ['name', 'price'],
properties: {
name: { bsonType: 'string' },
price: { bsonType: 'number', minimum: 0 }
}
}
}
});Listing and Inspecting Collections
Несколько команд позволяют изучить вашу базу данных: список коллекций, получение подробной информации и проверка статистики хранилища. show collections — это быстрая команда. В коде показано больше.
use shop
show collections
// orders
// products
// users
db.getCollectionInfos();
// Returns array of {name, type, options, idIndex} per collection
db.orders.stats().count;
// 15234
db.orders.totalIndexSize();
// 2359296 (bytes)Renaming and Dropping Collections
Вы можете мгновенно переименовать коллекцию или удалить её безвозвратно. Удаление является необратимым — корзины не существует, поэтому перед выполнением этой операции в рабочей среде сделайте резервную копию.
// Rename a collection
db.oldUsers.renameCollection('users');
// { ok: 1 }
// Drop a collection - IRREVERSIBLE
db.tempData.drop();
// true
// Drop the entire database - EXTREMELY DANGEROUS
// db.dropDatabase();
// Use only in development or with full backupMulti-Tenancy With Databases
Для SaaS-приложений мультитенантность может означать использование отдельной базы данных для каждого клиента для обеспечения строгой изоляции или одной общей коллекции, фильтруемой по полю tenantId. В коде представлены оба варианта.
// Option 1: Database-per-tenant
const db = client.db('tenant_' + tenantId);
db.users.find({});
// Each tenant has completely isolated data
// Option 2: Shared collection with tenantId field
const db = client.db('saas_app');
db.users.find({ tenantId: tenantId });
// All tenants share one collection, filtered by tenantIdCollection Naming Best Practices
Несколько правил именования помогут избежать проблем: будьте последовательны, используйте существительные во множественном числе, например users, и избегайте специальных символов. Хорошие соглашения об именовании облегчают чтение кода.
// Good collection names
db.users.find({});
db.order_items.find({});
db.productCategories.find({});
// Avoid these
db['$sales'].find({}); // $ prefix causes issues
db['system.logs'].find({}); // reserved prefix
db['my.collection'].find({}); // dot in name causes confusionThe WiredTiger Storage Engine
Механизм хранения по умолчанию в MongoDB — WiredTiger. Он позволяет выполнять множество операций записи одновременно без блокировок, сжимает данные на диске и ведет журнал записей, чтобы предотвратить потерю данных в случае сбоев.
// Check current storage engine
db.serverStatus().storageEngine;
// { name: 'wiredTiger', supportsCommittedReads: true, ... }
// Collection stats show compression savings
db.orders.stats();
// storageSize: 2097152 (compressed on disk)
// size: 8388608 (uncompressed logical size)Understanding the Oplog
Oplog — это специальный журнал всех операций записи в наборе реплик. Вторичные узлы воспроизводят его для поддержания синхронизации, также он обеспечивает работу механизмов Change Streams в MongoDB.
// Inspect oplog in mongosh (replica set members only)
use local
db.oplog.rs.find().sort({ $natural: -1 }).limit(3);
// { op: 'i', ns: 'shop.orders', o: { _id: ..., ... } }
// op: 'i'=insert, 'u'=update, 'd'=delete, 'c'=commandQuick Check
Проверьте свое понимание концепций MongoDB и баз данных NoSQL из этого урока.
Lesson Recap
Вы узнали, что MongoDB организует данные в виде баз данных, коллекций и документов, что базы данных создаются по мере необходимости (lazy creation), а за хранение данных отвечает движок WiredTiger. Далее: оболочка mongosh.
Часто задаваемые вопросы
Урок «Базы данных, коллекции и пространства имён» бесплатный?
Да — полный текст урока «Базы данных, коллекции и пространства имён» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс MongoDB Academy, подпишись на CoddyKit PRO. Курс MongoDB Academy содержит 4 уроков всего.
Чему я научусь в уроке «Базы данных, коллекции и пространства имён»?
Вы создадите базу данных, добавите коллекции и поймёте, как MongoDB организует данные на уровне пространства имён. Ты практикуешь MongoDB Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать MongoDB Academy?
Предыдущий опыт не требуется. MongoDB Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Базы данных, коллекции и пространства имён»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке MongoDB Academy?
Да. Каждый урок MongoDB Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Что такое документ BSON?
- Коллекции и таблицы SQL
- Базы данных, коллекции и пространства имён
- Основы оболочки mongosh