MongoDB documentation

MongoDB documentation

Mis on mongoDB, kollektsioon (kogu), dokument?:

MongoDB on tasuta kättesaadav avatud lähtekoodiga andmebaas. MongoDB on mitterelatsiooniline ehk mitte-SQL andmebaas ning andmeid hoitakse paindlikes JSON-dokumentides


Kasuta mongoDB Compass, proovi ja kirjelda mongoDB kasutatud käsud (andmebaasi loomine, kogu lisamine, dokumentide lisamine, kustutamine, otsimine, tingimuste lisamine otsingusse jne). Iga käsk selgita ja illustreeri lõikepiltidega:



Kujutame ette olukorda, kus ma pean leidma inimesi, kes töötavad kas tarkvaraarendaja või logistiku heaks, ja lihtsalt ei otsi teisi. Sellisel juhul on lihtsaim viis kasutada käsku $or.
All members 2

Käsk:


db.Users.find({$or:[{eriala: "Noorem Tarkvaraarendaja"}, {eriala: "IT Logistika"}]})
All members Find correct

Rohkem, vähem, võrdne, mitte võrdne

Seal on 5 võrdlustingimused:
  • $lt - "less than" - "vähem kui". Näiteks: { vanus: { $lt: 30 } } — leiab dokumente, mille vanuseväli on väiksem kui 30
  • $gt - "greather than" - "rohkem kui". Näiteks: { hind: { $gt: 100 } } — leia dokumente, mille hind on suurem kui 100
  • $lte - "less than or equal" - "väiksem või võrdne". Näiteks: { skoor: { $lte: 50 } } — leia dokumendid, mille skoor on ≤ 50
  • $gte - "greather than or equal" - "rohkem või võrdne". Näiteks: { hinnang: { $gte: 4.5 } } — leia dokumente, mille hinnang on ≥ 4.5
  • $ne - "not equal" - "pole võrdne". Näiteks: { status: { $ne: "active" } } — leiab dokumente, mille staatus pole "aktiivne"

Sortereerimine

Oletame olukorda, kus peate töötajad palga järgi sorteerima.
Ma tegin lihtsam tabel "Employeers", mis salvestab töötajaid, nende palku jne.
Kõik töötajaid

Seal on hea käsk, mis näitab tellimuste järjestust kasvavas järjekorras.:
db.Employeers.find().sort({salary:1})
Low to High
Samuti kahanevas järjekorras:
db.Employeers.find().sort({salary:-1})
High to Low

Vastuvõetud dokumentide arvu piirang

MongoDB-s kasutatakse meetodit .limit() päringu tulemusena tagastatavate dokumentide arvu piiramiseks.

Mida teeb .limit()?

  • Kui ilma .limit() funktsioonita tagastab päring kõik tingimusele vastavad dokumendid,
  • siis .limit(n) funktsiooniga tagastatakse ainult esimesed n dokumenti.
Näiteks käsk: db.Employeers.find().limit(3)
Limit

Uuendamine andmed

Uuenda ühte töötajat

Oletame, et soovite muuta töötaja nimega "Anna Ivanova" palka:
db.Employeers.updateOne({ name: "Anna Ivanova" },{ $set: { salary: 3800 }});
Updated Anna

Uuenda mitut töötajat

Näiteks suurendage kõigi "Arendus" osakonnas töötavate inimeste palka 10% võrra:
db.Employeers.updateMany({ department: "Development" },{ $mul: { salary: 1.10 }});
Arendusosakonna praegune palk on 3800, aga seda tuleks tõsta 1,10 võrra.
Development salary rn
Final salary of development

$rename - ümbernimetamiseks

MongoDB-s dokumendis oleva välja ümbernimetamiseks kasutage käsu updateOne või updateMany sees olevat operaatorit $rename.

Välja ümbernimetamise näide

Oletame, et Employeers kollektsioonis peame kõigi dokumentide jaoks ametikoha välja ümber nimetama jobTitle'iks:
db.Employeers.updateMany({},{ $rename: { "position": "jobTitle" }})
{} - tühi filter - rakenda kõigile dokumentidele

Kui peate ühe töötaja jaoks välja ümber nimetama

Näiteks töötaja nimega "Anna Ivanova" puhul:
db.Employeers.updateOne({ name: "Anna Ivanova" },{ $rename: { "position": "jobTitle" } });

Bulkwrite

bulkWrite on MongoDB-s võimas meetod, mis võimaldab teil ühe päringuga teha mitu kirjutamistoimingut (sisestamine, värskendamine, kustutamine jne). See on tõhus ja kiire, eriti kui teil on vaja teha korraga palju muudatusi.

Kuidas bulkWrite töötab?

Paljude eraldi käskude (insertOne, updateOne, deleteOne) asemel ühendate need üheks massiiviks ja kutsute välja bulkWrite'i.

Näide: Mitmed toimingud Employeers kollektsiooniga

db.Employeers.bulkWrite([{ insertOne: { document: { name: "Kati Saar", age: 29, jobTitle: "Analyst", department: "Finance", salary: 3300 } } },
{ updateOne: {
filter: { name: "Markus Tamm" },
update: { $set: { salary: 4800 } }
}
},
{ deleteOne: { filter: { name: "Jaan Kask" } } }
]);
Mis selles näites juhtub?
  • Lisatakse uus töötaja nimega Kati Saar.
  • Markus Tamme palk uuendatakse.
  • Töötaja nimega Jaan Kask kustutatakse.

Linkide tüübid

Nagu ka relatsioonandmebaasides, saab ka MongoDB-s modelleerida erinevat tüüpi dokumentide vahelisi seoseid. Vaatleme peamisi seosetüüpe, kasutades näitena Employeers kollektsiooni.

1. Üks-ühele suhtlus

Kirjeldus: Üks kogumiku dokument on lingitud ühe dokumendiga teises kogumikus.
Näide: Igal töötajal on unikaalne profiil koos isikuandmetega.
Rakendamine:
  • Manustamine: Me manustame profiili otse töötaja dokumenti.
  • { "_id": ObjectId("..."), "name": "Anna Ivanova", "profile": { "dob": "1995-03-15", "address": "Tallinn, Estonia" } }
  • Lingid: Salvesta töötaja dokumendi profiili link.
  • { "_id": ObjectId("..."), "name": "Anna Ivanova", "profileId": ObjectId("...") }
Millal kasutada:
  • Kui seotud andmeid küsitakse sageli koos.
  • Kui seotud andmed harva muutuvad.

2. Üks-mitmele-suhe

Kirjeldus: Üks dokument kollektsioonis on lingitud mitme dokumendiga teises kollektsioonis.
Näide: Üks juht haldab mitut töötajat.
Rakendamine:
  • Manustamine: saate manustada töötajate massiivi juhi dokumenti.
  • { "_id": ObjectId("..."), "name": "Markus Tamm", "employees": [ { "name": "Jaan Kask", "position": "Developer" }, { "name": "Liisa Saar", "position": "QA Engineer" } ] }
  • Lingid: Salvestame juhi dokumenti hulga linke töötajatele.
  • { "_id": ObjectId("..."), "name": "Markus Tamm", "employeeIds": [ObjectId("..."), ObjectId("...")] }
Millal kasutada:
  • Kui seotud dokumentide arv on väike.
  • Kui andmed muutuvad sageli ja vajavad uuendamist.

3. Paljude-mitmetele seos

Kirjeldus: Mitmed dokumendid ühes kogumikus on lingitud mitme dokumendiga teises kogumikus.
Näide: Töötajad saavad töötada mitme projektiga ja projektid võivad hõlmata mitut töötajat.
Rakendamine
  • Lingi massiivid: Iga dokument salvestab linkide massiivi lingitud dokumentidele.
  • { "_id": ObjectId("..."), "name": "Jaan Kask", "projectIds": [ObjectId("..."), ObjectId("...")] }
    { "_id": ObjectId("..."), "name": "Jaan Kask", "projectIds": [ObjectId("..."), ObjectId("...")] }
  • Lingikogu: looge linkide salvestamiseks eraldi kogu.
  • { "employeeId": ObjectId("..."), "projectId": ObjectId("...") }
Millal kasutada:
  • Kui omavahel seotud dokumentide arv on suur.
  • Kui keerulisi seoseid on vaja tõhusalt hallata.