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ęć.
| MongoDB | SQL (PostgreSQL/MySQL) | Opis |
|---|---|---|
| Database | Database | Kontener dla kolekcji. MongoDB może mieć wiele baz danych na jednym serwerze. |
| Collection | Table | Grupa dokumentów — odpowiednik tabeli SQL. Nie wymaga schema (każdy dokument może mieć różne pola). |
| Document | Row/Record | Pojedynczy rekord w formacie BSON/JSON. Może zawierać zagnieżdżone dokumenty i tablice. |
| Field | Column | Para key-value w dokumencie. Pola mogą być różne w różnych dokumentach tej samej kolekcji. |
| Index | Index | Struktura danych przyspieszająca zapytania. MongoDB tworzy automatycznie indeks na _id. |
| Aggregation | GROUP BY + JOIN | Pipeline transformacji dokumentów: $match, $group, $sort, $project, $lookup (join). |
| _id | Primary Key | Każdy dokument ma automatycznie generowane _id (ObjectId). Gwarantuje unikalność. |
| Replica Set | Replication | Grupa 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.
Powiązane artykuły
Skontaktuj się z nami
Porozmawiajmy o Twoim projekcie. Bezpłatna wycena w ciągu 24 godzin.
Wyślij zapytanie
Telefon
+48 790 814 814
Pon-Pt: 9:00 - 18:00
adam@fotz.pl
Odpowiadamy w ciągu 24h
Adres
Plac Wolności 16
61-739 Poznań
Godziny pracy
Wolisz porozmawiać?
Zadzwoń teraz i porozmawiaj z naszym specjalistą o Twoim projekcie.
Zadzwoń teraz