Карта / NoSQL (Redis, Mongo) / MongoDB (документы)

MongoDB (документы)

MongoDB — документная база данных: хранит записи как JSON-подобные документы, а не строки таблицы. Документ может содержать вложенные объекты и массивы прямо внутри себя.

db.users.insertOne({
    name: "Артур",
    age: 25,
    hobbies: ["программирование", "музыка"],
    address: { city: "Москва", zip: "101000" }   // вложенный объект — нормально
});

db.users.find({ age: { $gt: 18 } });    // аналог WHERE age > 18
db.users.find({ city: "Москва" });
Копнуть глубже

Главное отличие от реляционного подхода — связанные данные часто хранят прямо внутри документа, а не в отдельной таблице с JOIN. Вместо users и orders в разных таблицах со связью по id, в MongoDB можно хранить заказы прямо как массив внутри документа пользователя:

{
    name: "Артур",
    orders: [
        { product: "Книга", price: 500 },
        { product: "Ноутбук", price: 50000 }
    ]
}

Это ускоряет чтение (один документ — все данные сразу, без JOIN), но усложняет обновление, если одни и те же данные дублируются в нескольких документах.

Когда вложенность, а когда отдельная коллекция (аналог таблицы):

  • Вкладывай, если данные читаются всегда вместе и не растут бесконечно (адрес внутри пользователя — ок).
  • Выноси в отдельную коллекцию, если данные растут неограниченно (заказы за годы) или используются независимо от родителя.

MongoDB не имеет строгой схемы, но это не значит “можно как попало” — в реальных проектах структуру документов всё равно проектируют заранее и придерживаются её, иначе с данными становится сложно работать предсказуемо.

🎤 Закрыл тему, если можешь объяснить:
• что такое документ в MongoDB и чем он отличается от строки таблицы;
• когда вкладывать связанные данные в документ, а когда выносить в отдельную коллекцию (если дошёл до 2-го слоя).