Üdvözöljük a MongoDB világában! Ha Ön fejlesztő, adatbázis-adminisztrátor vagy csak érdeklődő, aki szeretné mélyebben megismerni a NoSQL adatbázisok egyik legnépszerűbb képviselőjét, akkor jó helyen jár. A MongoDB nem csupán egy adatbázis, hanem egy komplex ökoszisztéma, amelynek központi eleme a hatékony kezelést biztosító parancssori felület. Ebben a cikkben a MongoDB hivatalos parancssori kliensét, a mongosh-t vesszük górcső alá, és bemutatjuk a leghasznosabb parancsait, amelyekkel mesterien navigálhat, kezelhet és elemezhet adatokat.
A mongosh, a modern és funkciókban gazdag MongoDB Shell, sokkal több, mint egy egyszerű parancssor. Interaktív környezetet biztosít a MongoDB adatbázisokkal való interakcióhoz, támogatja a JavaScriptet, intelligens automatikus kiegészítést nyújt, és segít a komplex műveletek egyszerűsítésében. Akár adatokkal dolgozik, akár adatbázisokat adminisztrál, a mongosh az Ön nélkülözhetetlen eszköze lesz.
Miért éppen a mongosh?
A régi mongo shell utódjaként a mongosh számos fejlesztést hozott magával. Modernebb felhasználói élményt nyújt, beleértve a szintaxiskiemelést, a beépített parancstörténetet és a jobb hibakezelést. Ráadásul kompatibilis az összes MongoDB verzióval, és sokkal robosztusabb keretrendszert biztosít a JavaScript alapú szkripteléshez. Lássuk tehát, melyek azok a kulcsfontosságú parancsok, amelyekkel a legtöbbet hozhatja ki ebből a sokoldalú eszközből!
1. Kezdőlépések: Csatlakozás és Alapvető Navigáció
Csatlakozás a MongoDB-hez
A mongosh indítása egyszerű. Alapértelmezés szerint a localhost-on futó 27017-es porton lévő MongoDB példányhoz próbál csatlakozni. Ha az adatbázis máshol található, meg kell adnia a kapcsolódási stringet:
mongosh "mongodb://[felhasználó:jelszó@]host:port/[adatbázis]"
Például:
mongosh "mongodb://localhost:27017/admin"
Vagy távoli szerverhez:
mongosh "mongodb://felhasználó:jelszó@my_remote_host:27017/mydb"
A sikeres csatlakozás után a mongosh promptja fogadja Önt, általában a jelenleg kiválasztott adatbázissal (pl. test>).
Adatbázisok és Kollekciók Kezelése
show dbs: Ezzel a paranccsal listázhatja az összes rendelkezésre álló adatbázist a MongoDB szerveren.use <adatbázisnév>: Kiválasztja az adott nevű adatbázist. Ha az adatbázis nem létezik, a MongoDB automatikusan létrehozza, amikor először illeszt be adatot bele. Pl.:use mydatabasedb: Kiírja a jelenleg kiválasztott adatbázis nevét.show collections: Listázza az aktuális adatbázisban lévő összes kollekciót.db.createCollection("<kollekciónév>"): Létrehoz egy új kollekciót a megadott névvel. Például:db.createCollection("users")db.<kollekciónév>.drop(): Töröl egy teljes kollekciót. Figyelem, ez visszafordíthatatlan művelet! Például:db.users.drop()db.dropDatabase(): Törli a teljes aktuális adatbázist. Óvatosan használja!
2. CRUD Műveletek: Adatok Kezelése
A CRUD (Create, Read, Update, Delete) az adatbázis műveletek alapja. A mongosh rendkívül intuitív módon kezeli ezeket.
Adatok Beszúrása (Create)
db.<kollekciónév>.insertOne(<dokumentum>): Beszúr egyetlen dokumentumot egy kollekcióba.
db.users.insertOne({ name: "Anna", age: 30, city: "Budapest" })
db.<kollekciónév>.insertMany([<dokumentum1>, <dokumentum2>, ...]): Több dokumentumot szúr be egyszerre.db.users.insertMany([
{ name: "Bence", age: 25, city: "Debrecen" },
{ name: "Csaba", age: 35, city: "Szeged" }
])
Adatok Lekérdezése (Read)
db.<kollekciónév>.find(<feltétel>, <vetítés>): A kollekcióban lévő dokumentumokat kérdezi le. A feltétel (query) egy JSON objektum, a vetítés (projection) pedig meghatározza, mely mezők jelenjenek meg (1-val igen, 0-val nem).
db.users.find({}) // Összes dokumentum lekérdezése
db.users.find({ age: { $gt: 28 } }) // Életkor > 28
db.users.find({ city: "Budapest" }, { name: 1, _id: 0 }) // Csak a név mező, Budapestiek közül
db.users.find().limit(2) // Csak az első 2
db.users.find().sort({ age: -1 }) // Rendezés életkor szerint csökkenőbe
db.users.find().pretty() // Szépen formázott kimenet
db.<kollekciónév>.findOne(<feltétel>): Az első olyan dokumentumot adja vissza, amely megfelel a feltételnek.db.users.findOne({ name: "Anna" })
Adatok Frissítése (Update)
Az update műveletekhez speciális operátorok, mint például a $set, $inc, $push stb. szükségesek.
db.<kollekciónév>.updateOne(<feltétel>, <frissítési operátorok>): Egyetlen dokumentumot frissít.
db.users.updateOne(
{ name: "Anna" },
{ $set: { age: 31, "address.street": "Fő utca" } }
)
db.<kollekciónév>.updateMany(<feltétel>, <frissítési operátorok>): Több dokumentumot frissít, amelyek megfelelnek a feltételnek.db.users.updateMany(
{ city: "Budapest" },
{ $inc: { age: 1 } } // Minden budapesti lakos életkorát eggyel növeli
)
db.<kollekciónév>.replaceOne(<feltétel>, <új dokumentum>): Kicseréli az első olyan dokumentumot, amely megfelel a feltételnek, egy teljesen új dokumentumra.db.users.replaceOne(
{ name: "Bence" },
{ name: "Benedek", age: 26, hobbies: ["úszás", "olvasás"] }
)
Adatok Törlése (Delete)
db.<kollekciónév>.deleteOne(<feltétel>): Egyetlen dokumentumot töröl.
db.users.deleteOne({ name: "Csaba" })
db.<kollekciónév>.deleteMany(<feltétel>): Több dokumentumot töröl, amelyek megfelelnek a feltételnek.db.users.deleteMany({ age: { $lt: 20 } }) // Törli az összes 20 év alatti felhasználót
3. Indexelés: Teljesítményoptimalizálás
A MongoDB indexek kulcsfontosságúak a lekérdezések teljesítményének javításában, különösen nagy adathalmazok esetén. A mongosh segítségével könnyedén kezelheti őket.
db.<kollekciónév>.createIndex(<index specifikáció>, <opciók>): Létrehoz egy új indexet.
db.users.createIndex({ city: 1 }) // Egy mezős index, növekvő sorrendben
db.users.createIndex({ name: 1, age: -1 }, { unique: true }) // Kompozit index, egyedi megszorítással
db.<kollekciónév>.getIndexes(): Listázza az adott kollekció összes indexét.db.<kollekciónév>.dropIndex("<indexnév>"): Töröl egy specifikus indexet. Az indexnevet általában a getIndexes() kimenetéből kaphatja meg, vagy a létrehozáskor megadott mezőnév alapján generálja a MongoDB.db.users.dropIndex("city_1")
db.<kollekciónév>.dropIndexes(): Törli az összes indexet egy kollekcióban, kivéve az alapértelmezett _id indexet.4. Aggregációs Keretrendszer: Komplex Adatfeldolgozás
Az aggregációs keretrendszer lehetővé teszi komplex adatfeldolgozási feladatok elvégzését az adatokon, például csoportosítást, szűrést, átalakítást és összegzést. Egy „pipeline”-on keresztül adja meg a műveletek sorrendjét.
db.<kollekciónév>.aggregate([ <stage1>, <stage2>, ... ]): Futtat egy aggregációs pipeline-t.
db.users.aggregate([
{ $match: { city: "Budapest" } }, // Szűrés: Csak budapestiek
{ $group: { _id: "$age", count: { $sum: 1 } } }, // Csoportosítás életkor szerint, megszámolja az azonos életkorúakat
{ $sort: { _id: 1 } } // Rendezés életkor szerint növekvőbe
])
Gyakori aggregációs fázisok (stages):
$match: Dokumentumok szűrése.$project: A kimeneti mezők kiválasztása, hozzáadása vagy kizárása.$group: Dokumentumok csoportosítása kulcsértékek alapján.$sort: Dokumentumok rendezése.$limit: A továbbadandó dokumentumok számának korlátozása.$skip: A dokumentumok kihagyása az elejéről.$lookup: „Join” művelet végrehajtása más kollekciókkal (lásd: beágyazott dokumentumok helyett referenciák).
5. Adminisztratív Feladatok és Felhasználókezelés
Az adatbázis-adminisztrátorok számára is számos hasznos parancs áll rendelkezésre a mongosh-ban.
db.getUsers(): Listázza az aktuális adatbázisban lévő felhasználókat.db.createUser(<felhasználói objektum>): Létrehoz egy új felhasználót az adatbázisban.
db.createUser({
user: "developer",
pwd: passwordPrompt(), // Biztonságos jelszókérés
roles: [{ role: "readWrite", db: "mydb" }]
})
db.grantRolesToUser("<felhasználónév>", [<szerepek>]): Szerepeket ad egy felhasználónak.db.revokeRolesFromUser("<felhasználónév>", [<szerepek>]): Megvon szerepeket egy felhasználótól.db.changeUserPassword("<felhasználónév>", "<új jelszó>"): Megváltoztatja egy felhasználó jelszavát.db.dropUser("<felhasználónév>"): Töröl egy felhasználót.db.serverStatus(): Részletes információt ad a MongoDB szerver állapotáról. Ez rendkívül hasznos a teljesítmény monitorozásához és a problémák diagnosztizálásához.db.currentOp(): Megmutatja az éppen futó műveleteket a MongoDB szerveren.6. JavaScript Integráció és Szkriptelés
A mongosh alapvetően egy JavaScript shell. Ez azt jelenti, hogy bármilyen érvényes JavaScript kódot futtathat benne, ami rendkívül rugalmassá teszi.
- Változók deklarálása és függvények definiálása:
let myVar = "Hello MongoDB!";
print(myVar);
function greet(name) {
return "Hello, " + name + "!";
}
greet("World");
mongosh-ba a load() paranccsal.load("my_script.js")
A my_script.js fájlban lehet például dokumentumok importálása, adatbázis-tisztítás vagy jelentések generálása.
.editor: Megnyit egy beépített szövegszerkesztőt, ahol kényelmesen írhat több soros JavaScript kódot, majd futtathatja azt. Ez különösen hasznos komplexebb lekérdezések vagy szkriptek esetén.7. Segítség és Hasznos Tippek
help(): Általános súgót jelenít meg.db.help(): Súgót ad az adatbázis-szintű parancsokhoz.db.<kollekciónév>.help(): Súgót ad a kollekció-szintű parancsokhoz.- Automatikus kiegészítés (Tab): A
mongoshintelligens automatikus kiegészítést nyújt. Nyomja meg aTabgombot kétszer egy parancs vagy mezőnév begépelése közben, hogy megtekinthesse a lehetséges opciókat. - Parancstörténet: A fel és le nyilakkal navigálhat a korábbi parancsai között.
- Kimenet formázása: A
.pretty()metódus használata afind()parancs után olvashatóbb JSON kimenetet eredményez. A.toArray()metódussal listaként kaphatja meg az eredményeket, ami szkriptelésnél hasznos. - Biztonság: Soha ne írjon be érzékeny adatokat (pl. jelszót) közvetlenül a parancssorba. Használja a
passwordPrompt()függvényt, amikor felhasználót hoz létre vagy jelszót módosít, hogy interaktívan, biztonságosan kérje be a jelszót.
Összegzés
A MongoDB mongosh parancssori kliense egy rendkívül sokoldalú és hatékony eszköz, amely nélkülözhetetlen mindenki számára, aki MongoDB adatbázisokkal dolgozik. A basic CRUD műveletektől kezdve, az indexelésen és az aggregációs keretrendszeren át, egészen a komplex adminisztratív feladatokig és a JavaScript alapú szkriptelésig mindenre kiterjed. A fenti parancsok és tippek elsajátításával nemcsak hatékonyabban fog dolgozni, hanem mélyebb betekintést nyerhet adatbázisainak működésébe is.
Ne feledje, a legjobb módja a tanulásnak a gyakorlás! Indítsa el a mongosh-t, csatlakozzon egy adatbázishoz, és kezdjen el kísérletezni a parancsokkal. Fedezze fel a lehetőségeket, és tegye hatékonyabbá a mindennapi MongoDB feladatait!
Leave a Reply