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:
- Andmebaasi loomine - use mongo
- Kogu lisamine - db.createColleciton("")
- Dokumentide lisamine - db."collectionName".insert({})

- Kustutamine - kui me tahame kustuta andmebaas me saame kasutada db.dropDatabase().

- Otsimine - db."collectionName".find()

- Otsi võtme järgi - db."collectionName".find({"key": "value"}).
Näiteks:
Siin mul on kõik kasutajad kollektsioonis "Users":
Ja kui mul on näiteks 10000 kasutajad ja ma tahan otsi kasutaja, kui on 11 aastat vana, ma saan kasutada see käsk
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.
Käsk:
db.Users.find({$or:[{eriala: "Noorem Tarkvaraarendaja"}, {eriala: "IT Logistika"}]})
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.
Seal on hea käsk, mis näitab tellimuste järjestust kasvavas järjekorras.:
db.Employeers.find().sort({salary:1})
Samuti kahanevas järjekorras:
db.Employeers.find().sort({salary:-1})
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)
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 }});
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.
$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.