MongoDB

Najpopularniejsza baza dokumentowa NoSQL przechowująca dane w formacie BSON (binarny JSON). Ceniona za elastyczny schemat i łatwe skalowanie.

MongoDB to najpopularniejsza baza dokumentowa z rodziny NoSQL. Zamiast wierszy i kolumn jak w klasycznej bazie relacyjnej, trzyma dane w postaci dokumentów wyglądających jak JSON, a pod spodem zapisuje je w formacie BSON (Binary JSON) — binarnej odmianie JSON-a, która dokłada typy danych, których czysty tekst nie ma, na przykład Date, ObjectId czy liczby 64-bitowe. Dokumenty grupujesz w kolekcje, a kolekcje żyją w bazie. Jeśli znasz tabele i wiersze z SQL-a: kolekcja to mniej więcej tabela, a dokument to wiersz, tyle że każdy wiersz może mieć inny zestaw pól.

Jak to działa i do czego się przydaje

Największy haczyk (w dobrym sensie) to elastyczny schemat. Nie musisz z góry deklarować struktury — jeden dokument może mieć pole telefon, a sąsiedni nie. To wygodne przy szybkim prototypowaniu i przy danych, które naturalnie mają zagnieżdżenia (zamówienie z listą pozycji, profil użytkownika z adresami). Zamiast rozbijać to na pięć tabel i sklejać JOIN-ami, trzymasz wszystko w jednym dokumencie i czytasz jednym zapytaniem.

MongoDB dobrze skaluje się w poziomie przez sharding (rozrzucanie danych na wiele serwerów) i zapewnia wysoką dostępność przez replica sets (kopie tych samych danych z automatycznym przełączaniem przy awarii). Dlatego często ląduje pod aplikacjami webowymi, mobilnymi, systemami z dużą ilością zdarzeń czy katalogami produktów.

Przykład z praktyki

Łączysz się przez powłokę mongosh. Dodanie i odczyt dokumentu wygląda tak:

  • db.users.insertOne({ name: "Ania", tags: ["js", "node"], active: true })
  • db.users.find({ tags: "node" })

Z poziomu kodu zwykle używasz oficjalnego sterownika (np. mongodb dla Node.js) albo warstwy ODM jak Mongoose, która dokłada walidację i schematy w aplikacji. Do nauki i prototypów świetnie nadaje się darmowy klaster MongoDB Atlas w chmurze — nie musisz nic instalować lokalnie. Aktualna gałąź to MongoDB 8.x.

Częste błędy i mity

Mit pierwszy: „MongoDB nie ma schematu, więc nie trzeba projektować danych”. Trzeba — tylko projektowanie przenosi się z bazy do Twojej głowy i kodu. Bałagan w dokumentach to klasyk juniora.

Mit drugi: „NoSQL nie ma transakcji”. Ma — od wersji 4.0 działają transakcje wielodokumentowe, choć jeśli ich potrzebujesz na każdym kroku, może baza relacyjna pasuje lepiej. Uważaj też na brak indeksów: zapytanie bez indeksu skanuje całą kolekcję i potrafi położyć wydajność. Sprawdzaj plan przez explain().

Pojęcia powiązane: NoSQL, BSON, JSON, dokument i kolekcja, sharding, replica set, indeks, agregacja (aggregation pipeline), Mongoose, baza relacyjna (SQL).