MongoDB — co to jest i jak działa?

MongoDB to dokumentowa baza danych NoSQL przechowująca dane w elastycznych dokumentach JSON. Poznaj kolekcje, zapytania, aggregation pipeline, indeksy i skalowanie.

MongoDB vs SQL — mapowanie pojęć

Jeśli znasz SQL, łatwo zrozumiesz MongoDB przez analogię do znanych pojęć.

MongoDBSQL (PostgreSQL/MySQL)Opis
DatabaseDatabaseKontener dla kolekcji. MongoDB może mieć wiele baz danych na jednym serwerze.
CollectionTableGrupa dokumentów — odpowiednik tabeli SQL. Nie wymaga schema (każdy dokument może mieć różne pola).
DocumentRow/RecordPojedynczy rekord w formacie BSON/JSON. Może zawierać zagnieżdżone dokumenty i tablice.
FieldColumnPara key-value w dokumencie. Pola mogą być różne w różnych dokumentach tej samej kolekcji.
IndexIndexStruktura danych przyspieszająca zapytania. MongoDB tworzy automatycznie indeks na _id.
AggregationGROUP BY + JOINPipeline transformacji dokumentów: $match, $group, $sort, $project, $lookup (join).
_idPrimary KeyKażdy dokument ma automatycznie generowane _id (ObjectId). Gwarantuje unikalność.
Replica SetReplicationGrupa serwerów MongoDB z replikowanymi danymi. 1 Primary + N Secondary, automatic failover.

Zapytania MongoDB — przykłady

Insert

Dodawanie dokumentów

db.users.insertOne({
  name: "Jan Kowalski",
  email: "jan@example.com",
  age: 30,
  address: {
    city: "Warszawa",
    zip: "00-001"
  },
  tags: ["developer", "nodejs"]
})

Find (Query)

Wyszukiwanie dokumentów

// Proste wyszukiwanie
db.users.find({ age: { $gte: 25 } })

// Z projekcją (tylko wybrane pola)
db.users.find(
  { city: "Warszawa" },
  { name: 1, email: 1, _id: 0 }
)

// Sortowanie i limit
db.users.find().sort({ age: -1 }).limit(10)

Update

Aktualizacja dokumentów

// Aktualizuj jedno pole
db.users.updateOne(
  { email: "jan@example.com" },
  { $set: { age: 31 } }
)

// Dodaj do tablicy
db.users.updateOne(
  { _id: ObjectId("...") },
  { $push: { tags: "typescript" } }
)

Aggregation Pipeline

Złożone transformacje danych

db.orders.aggregate([
  { $match: { status: "completed" } },
  { $group: {
    _id: "$userId",
    totalAmount: { $sum: "$amount" },
    orderCount: { $count: {} }
  }},
  { $sort: { totalAmount: -1 } },
  { $limit: 10 }
])

Typy indeksów MongoDB

Single Field Index

db.users.createIndex({ email: 1 })

Wyszukiwanie po jednym polu. Domyślny dla większości zapytań.

Compound Index

db.users.createIndex({ city: 1, age: -1 })

Zapytania filtrujące/sortujące po wielu polach. Kolejność pól ważna.

Unique Index

db.users.createIndex({ email: 1 }, { unique: true })

Wymusza unikalność wartości w polu (jak UNIQUE CONSTRAINT w SQL).

Text Index

db.articles.createIndex({ content: "text" })

Full-text search. Tokenizacja, stemming, stop words.

TTL Index

db.sessions.createIndex({ createdAt: 1 }, { expireAfterSeconds: 3600 })

Automatyczne usuwanie dokumentów po czasie. Idealne dla sesji, cache.

Geospatial Index

db.places.createIndex({ location: "2dsphere" })

Zapytania geograficzne: nearest, within radius, polygon.

FAQ — MongoDB

Co to jest MongoDB?

MongoDB to open-source'owa, dokumentowa baza danych NoSQL — przechowuje dane jako elastyczne dokumenty JSON (BSON — Binary JSON) zamiast tabel relacyjnych. Stworzona przez 10gen w 2007 roku (teraz MongoDB Inc.), MongoDB oferuje elastyczne schema (brak sztywnej struktury tabel), poziome skalowanie (sharding), replikację (replica sets) i bogaty język zapytań. Nazwa pochodzi od słowa 'humongous' (gigantyczny). Używana przez eBay, Craigslist, Forbes, Toyota.

Czym różni się MongoDB od PostgreSQL?

MongoDB (NoSQL) vs PostgreSQL (SQL): Schema — MongoDB jest schema-flexible (każdy dokument może mieć inne pola), PostgreSQL ma sztywną strukturę tabel. Relacje — MongoDB przechowuje powiązane dane zagnieżdżone w jednym dokumencie (embedding) lub przez referencje; PostgreSQL przez JOIN. Skalowanie — MongoDB skaluje horyzontalnie przez sharding, PostgreSQL wertykalnie (choć Citus dodaje sharding). Use case — MongoDB lepszy dla dokumentów, katalogów, CMS; PostgreSQL dla transakcji finansowych, raportowania, złożonych relacji.

Co to jest BSON w MongoDB?

BSON (Binary JSON) to binarny format serializacji używany przez MongoDB do przechowywania i przesyłania dokumentów. BSON rozszerza JSON o dodatkowe typy danych: Date (zamiast stringa), BinData (dane binarne), ObjectId (unikalne ID), Decimal128 (precyzja finansowa), Int32/Int64 (typy liczb). BSON jest bardziej efektywny od JSON do przechowywania i parsowania. Zewnętrznie MongoDB używa JSON-like składni w zapytaniach i shell — BSON to tylko format wewnętrzny.

Jak działa skalowanie w MongoDB?

MongoDB skaluje przez Replica Sets i Sharding. Replica Set: 1 Primary (odczyty i zapisy) + N Secondary (replikacja, odczyty). Automatyczny failover gdy Primary pada — jeden z Secondary staje się Primary (wybory). Sharding: poziome skalowanie — dane rozkładane między wiele serwerów (shards) na podstawie shard key. Każdy shard to Replica Set. Mongos (query router) kieruje zapytania do właściwych shardów. MongoDB Atlas (managed cloud) oferuje auto-sharding bez ręcznej konfiguracji.

Kiedy używać MongoDB zamiast relacyjnej bazy danych?

MongoDB jest lepsze gdy: dane mają hierarchiczną strukturę (dokumenty z zagnieżdżonymi subdokumentami), schema zmienia się często (agile development, prototypowanie), potrzebujesz horyzontalnego skalowania od razu, przechowujesz catalogue produktów z różnymi atrybutami, budujesz CMS lub blog. SQL jest lepszy gdy: dane są wysoce relacyjne (wiele tabel z JOIN), potrzebujesz transakcji ACID, raportujesz dane analityczne, masz strict financial lub compliance requirements.

Kontakt

Skontaktuj się z nami

Porozmawiajmy o Twoim projekcie. Bezpłatna wycena w ciągu 24 godzin.

Wyślij zapytanie

Bezpłatna wycena w 24h
Bez zobowiązań
Indywidualne podejście
Ekspresowa realizacja

Telefon

+48 790 814 814

Pon-Pt: 9:00 - 18:00

Email

adam@fotz.pl

Odpowiadamy w ciągu 24h

Adres rejestrowy

Poznańska 117/11

62-023 Kamionki · obsługa zdalna

Godziny pracy

Pon - Pt9:00 - 18:00
Sob - NdzZamknięte

Wolisz porozmawiać?

Zadzwoń teraz i porozmawiaj z naszym specjalistą o Twoim projekcie.

Zadzwoń teraz