0Pricing
MongoDB Academy · Урок

Базы данных, коллекции и пространства имён

Вы создадите базу данных, добавите коллекции и поймёте, как 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.000GB

System 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 backup

Multi-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 tenantId

Collection 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 confusion

The 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'=command

Quick 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 — локальная установка не требуется.

Все уроки этого курса

  1. Что такое документ BSON?
  2. Коллекции и таблицы SQL
  3. Базы данных, коллекции и пространства имён
  4. Основы оболочки mongosh
← Назад к MongoDB Academy