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.

    Czytaj dalej

    Powiązane artykuły

    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

    Plac Wolności 16

    61-739 Poznań

    Godziny pracy

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

    Wolisz porozmawiać?

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

    Zadzwoń teraz

    Szanujemy Twoją prywatność

    Używamy plików cookies, aby zapewnić najlepsze doświadczenia na naszej stronie. Klikając "Akceptuję", zgadzasz się na ich użycie.