Какую структуру данных и в каком формате хранит MongoDB?

Ответ

MongoDB хранит данные как документы в формате BSON (Binary JSON), которые организованы в коллекции.

Ключевые элементы:

  • Документ: Базовая единица данных, аналогичная строке в SQL, но с гибкой схемой. Документы в одной коллекции могут иметь разный набор полей.
  • Коллекция: Группа документов (аналог таблицы в реляционной БД).
  • База данных: Контейнер для коллекций.

Пример документа:

{
  "_id": ObjectId("507f1f77bcf86cd799439011"),
  "name": "John Doe",
  "age": 30,
  "address": {
    "street": "123 Main St",
    "city": "New York"
  },
  "hobbies": ["reading", "hiking"]
}

Основные особенности:

  • Поле _id является обязательным и служит первичным ключом (автоматически генерируется, если не указано).
  • Поддерживает сложные структуры: вложенные документы и массивы.
  • Динамическая схема позволяет изменять структуру документов без миграций базы данных.

Ответ 18+ 🔞

Да ты посмотри, какая штука интересная, этот ваш MongoDB! Ну просто ёперный театр, а не база данных. Всё у них не как у людей, не по-реляционному, а по-своему, хитрожопому.

Вот смотри, суть в чём. Вместо этих ваших скучных таблиц, где каждая строчка — как солдат в строю, у них данные живут документами. А документы эти — они в формате BSON, это типа бинарного JSON, чтоб быстрее всё было. И сваливают их все в кучу, которая называется коллекция.

Основные киты, на которых всё держится:

  • Документ: Это, блядь, основа основ. Как строка в SQL, только с характером. Можешь в одну коллекцию запихнуть документ с полями name и age, а рядом — документ с полями title, tags и coordinates. Схема? Какая, на хуй, схема? Динамическая она, гибкая! Хочешь — поле добавил, хочешь — забыл. Без всяких этих миграций, которые мозг выносят.
  • Коллекция: Ну это как папка в компе. Кинул туда кучу документов — вот тебе и коллекция. Аналог таблицы, только проще и свободнее.
  • База данных: Ну это уже контейнер для этих самых коллекций. Всё логично, в общем.

Вот, полюбуйся, как документ выглядит:

{
  "_id": ObjectId("507f1f77bcf86cd799439011"),
  "name": "John Doe",
  "age": 30,
  "address": {
    "street": "123 Main St",
    "city": "New York"
  },
  "hobbies": ["reading", "hiking"]
}

Что тут вообще происходит, на что обратить внимание:

  • Поле _id — это святое, блядь. Оно обязательное и главное, как первичный ключ. Если сам не придумал — система тебе его любезно сгенерирует, не парься.
  • Смотри, какая красота: прямо внутри документа может сидеть другой документ (address). Или массив (hobbies). Вложенности, блять, любые! В обычной таблице такое только через семь JOIN'ов вымучаешь, а тут всё в одном месте, удобно, ебать мои старые костыли.
  • И самое главное — динамическая схема. Это ж просто песня, а не фича! Не нужно заранее продумывать всю структуру до мелочей и потом страдать, когда что-то поменялось. Добавил поле новому документу — и всё, оно есть. Старые документы про него не знают и не парятся. Живите дружно.

Вот такая, блядь, философия. Не структура ради структуры, а данные ради удобства. Поначалу мозг ломает, если с реляционками привык, а потом — вротберунчик, кайфуешь.