A MongoDB parancssori kliens (mongosh) leghasznosabb parancsai

Ü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 mydatabase
  • db: 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");
  • Külső szkriptek betöltése: Ha gyakran futtat komplex műveleteket vagy szeretné automatizálni a feladatokat, írhat JavaScript fájlokat, majd betöltheti őket a 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 mongosh intelligens automatikus kiegészítést nyújt. Nyomja meg a Tab gombot 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 a find() 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

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük