Interogările MongoDB vă permit să căutați și să analizați baza de date rapid și eficient. Structura metodei este logică și puteți utiliza numeroși parametri împreună cu aceasta.

Cum să căutați eficient în colecții

Fiind o soluție NoSQL bazată pe documente, MongoDB oferă utilizatorilor posibilitatea de a stoca și gestiona cu ușurință cantități mari și diverse de date. Sistemul de gestionare a bazelor de date este foarte flexibil și poate fi ușor scalabil pe orizontală.

Spre deosebire de bazele de date relaționale, datele din Mongo DB sunt stocate în documente BSON (JSON binar) și grupate în colecții. Pentru ca această abordare să funcționeze cu adevărat, este important săexiste mecanisme puternice de interogare care să poată cerceta baza de date și să prezinte informațiile de care au nevoie utilizatorii. Cu interogările MongoDB, baza de date poate căuta chiar și în colecții cu structuri complexe pentru a furniza informațiile pe care le căutați.

Sfat

Utilizarea shell-ului pentru MongoDB este prea complicată? MongoDB Compass este o interfață grafică gratuită care facilitează navigarea în MongoDB.

Ce sunt interogările MongoDB?

Interogările MongoDB sunt un instrument ușor de utilizat pentru căutarea structurilor de date complexe. Acestea respectă reguli logice și funcționează ca opțiunile de filtrare pe care le găsiți pe majoritatea site-urilor web. Acest lucru vă permite să formulați căutarea cât mai precis posibil, astfel încât să obțineți cele mai bune rezultate posibile. Acest lucru este deosebit de important, deoarece MongoDB poate stoca multe tipuri diferite de date. Fără opțiunile de filtrare necesare, ar fi dificil să gestionați baza de date. În secțiunile următoare, vom explica ce aveți nevoie pentru a crea interogări MongoDB și cum să le utilizați.

Care sunt cerințele pentru interogările MongoDB?

Există doar câteva cerințe pentru utilizarea interogărilor MongoDB.

  1. Trebuie să aveți MongoDB instalat pe computer. Baza de date funcționează pe multe sisteme de operare, astfel încât instrucțiunile de mai jos sunt valabile indiferent dacă utilizați Linux, OS X sau Windows. Pașii care urmează după instalare sunt identici pe toate sistemele și afectează doar baza de date în sine. Puteți afla cum funcționează instalarea în tutorialul nostru MongoDB.
  2. Aveți nevoie de drepturi de administrator pentru a utiliza funcția de căutare.
  3. Cel mai bine este să creați un mediu de testare, astfel încât să puteți încerca interogările Mongo DB fără riscuri.

Cum se structurează o colecție de teste

Mai întâi deschideți shell-ul și conectați-vă ca administrator. Apoi creați o nouă colecție care va servi drept mediu de testare pentru primele dvs. interogări MongoDB. Pe lângă căutarea documentelor simple, metoda poate căuta și matrice, diverse câmpuri și documente încorporate, motiv pentru care am decis să creăm o colecție puțin mai complexă. Astfel veți avea o idee mai clară asupra domeniului de aplicare al interogărilor MongoDB.

Exemplul nostru constă într-o listă de clienți. Formatul acestei liste este următorul:

{
    "name" : "Schulz",
    "units" : 642,
    "location" : [ "Germany", "Austria" ],
    "transactions" : {
        "first" : {
            "year" : 2017,
        },
        "last" : {
            "year" : 2023,
        },
        "total" : 14
    }
}
shell

Acest document conține următoarele informații:

  • nume: Numele companiei care a achiziționat bunurile.
  • unități: Numărul total de produse comandate de companie.
  • locație: Locația companiei. Dacă există mai multe sucursale, acestea pot fi salvate sub forma unui tablou.
  • tranzacții: acest câmp conține un document suplimentar în interiorul său. Documentele de acest tip sunt denumite „documente încorporate” sau „documente imbricate”. Fiecare dintre documentele de tranzacție conține informații despre perioada de timp de când compania este client (la rubrica „primul”), data la care a fost plasată ultima comandă (la rubrica „ultimul”) și numărul total de comenzi plasate de companie (la rubrica „total”).

Pentru acest exemplu, am adăugat documente suplimentare pentru a facilita includerea informațiilor la un moment ulterior. Acest lucru ajută la asigurarea unei bune vizualizări a informațiilor din baza de date.

Crearea unei colecții de testare pentru interogări MongoDB

Acum, vom crea o colecție numită „Clienți”. Pentru a păstra o imagine de ansamblu asupra colecției, vom include doar cinci intrări. Dacă utilizați interogări MongoDB pentru muncă, puteți crea colecții mai extinse folosind metoda insertMany.

Iată cum arată colecția noastră de teste:

db.customers.insertMany ( [
{
    "name" : "Schulz",
    "location" : [ "Germany", "Austria" ],
    "transactions" : {
        "first" : {
            "year" : 2017,
        },
        "last" : {
            "year" : 2023,
        },
        "total" : 14
    }
},
{
    "name" : "ATS",
    "units" : 17,
    "location" : "France",
    "transactions" : {
        "first" : {
            "year" : 2021,
        },
        "last" : {
            "year" : 2022,
        },
        "total" : 2,
    }
},
{
    "name" : "Meyer",
    "units" : 814,
    "location" : [ "Austria", "Germany" ],
    "transactions" : {
        "first" : {
            "year" : 2016,
        },
        "last" : {
            "year" : 2023,
        },
        "total" : 22,
    }
},
{
    "name" : "Pawolski",
    "units" : 313,
    "location" : [ "Germany", "Poland" ],
    "transactions" : {
            "first" : {
            "year" : 2017,
            },
        "last" : {
            "year" : 2020,
        },
        "total" : 9,
    }
},
{
    "name" : "Jorgensen",
    "units" : 7,
    "location" : "Denmark",
    "transactions" : {
        "first" : {
            "year" : 2022,
        },
        "last" : {
            "year" : 2023,
        },
        "total" : 2,
    }
}
] )
shell

Când executați această intrare cu datele pe care le-am utilizat (sau cu propriile date), veți primi în schimb o listă cu ID-urile obiectelor. Acestea sunt unice și garantează că fiecare document poate fi găsit și prin intermediul unui ID corespunzător. Dacă doriți să vă asigurați că toate documentele au fost incluse în colecție, puteți utiliza MongoDB find fără parametri:

db.customers.find ( )
shell

Rezultatul este o listă cu toate ID-urile obiectelor, împreună cu documentele complete. Acum le puteți căuta folosind interogări MongoDB.

Cum se utilizează interogările MongoDB cu câmpuri și matrice

Puteți utiliza interogările MongoDB pentru a căuta câmpuri individuale, mai multe câmpuri, matrice și documente încorporate. Vom analiza fiecare dintre acestea în secțiunile de mai jos.

Interogarea câmpurilor individuale cu interogări MongoDB

Rezultatul din MongoDB find arată cât de utile pot fi interogările MongoDB. Micul nostru eșantion produce un rezultat cu șiruri lungi de caractere, așa că vă puteți imagina cum ar fi dacă ați lucra cu un eșantion mai mare.

În exemplul următor, vom folosi tot find, dar de data aceasta vom crea o cerință specială pe care un document trebuie să o îndeplinească pentru a fi afișat. Mai precis, vom căuta toate documentele care au numele „ATS”.

db.customers.find (
    { "name" : "ATS" }
)
shell

Interogări simple MongoDB precum aceasta vor căuta acum toate documentele din colecție și le vor potrivi pe cele care au valoarea numelui „ATS”. Acest lucru se aplică doar unei singure intrări din colecția noastră, astfel încât rezultatul arată astfel:

db.customers.find ( { "name" : "ATS" } )
{
    "_id" : ObjectID ( "673d14684o75iftbb0ct5003" ),
    "name" : "ATS",
    "units" : 17,
    "location" : "France",
    "transactions" : {
        "first" : {
            "year" : 2021,
        },
        "last" : {
            "year" : 2022,
        },
        "total" : 2
    }
shell

Se poate proceda și invers. Dacă doriți să afișați toate rezultatele, cu excepția intrării pentru „ATS”, introduceți următoarele:

db.customers.find (
    { "name" : { $ne : "ATS" } }
)
shell

Dacă doriți să generați interogări MongoDB cu valori diferite, puteți face acest lucru cu ajutorul unui array. Vom face acest lucru folosind clienții ATS și Jorgensen.

db.customers.find (
    { "name" : [ $in : [ "ATS", "Jorgensen" ] } }
)
shell

Interogarea mai multor câmpuri cu interogări MongoDB

Dacă aveți nevoie de rezultate precise, este important să faceți interogarea mai specifică. Puteți face interogările MongoDB mai precise utilizând parametri suplimentari. Mai jos vom specifica o valoare din segmentul „units” în plus față de numele companiei „ATS”. În acest fel, interogarea noastră caută un document care conține ambele valori:

db.customers.find (
    { "name" : "ATS", "units" : 17 }
)
shell

Avem o potrivire exactă. Dacă doar una dintre cele două valori se potrivește, nu va fi afișat niciun rezultat. Iată un exemplu de interogare fără rezultate:

db.customers.find (
    { "name" : "ATS", "units" : 25 }
)
shell

Dacă doriți să luați în considerare valori diferite atunci când utilizați interogări MongoDB, dar doriți ca interogarea să genereze un rezultat chiar și atunci când este îndeplinită doar una dintre cerințe, introduceți următoarea comandă:

db.customers.find (
    { $or : [ {"name" : "ATS"}, { "units" : 25 } ] }
)
shell

Interogarea valorilor din matrice

De asemenea, puteți lua în considerare valorile din matrice în interogările MongoDB. În colecția noastră, există companii care au sucursale în mai multe țări. Dacă doriți să afișați toate companiile care au cel puțin o sucursală în Germania, puteți introduce următoarele:

db.customers.find (
    { "location" : "Germany" }
)
shell

Rezultatul conține acum toți cei trei clienți care au cel puțin o sucursală în Germania. Dacă doriți să extindeți intrarea și să găsiți companii care au sucursale în Germania și Austria folosind aceeași interogare, puteți utiliza o matrice:

db.customers.find (
    { "location" : [ "Germany", "Austria" ] }
)
shell

Veți observa că intrarea afișează un singur rezultat, chiar dacă, teoretic, două companii corespund criteriilor de căutare. Motivul este că interogările MongoDB respectă întocmai intrarea care le este furnizată, inclusiv ordinea elementelor. Dacă doriți ca metoda să ia în considerare valorile indiferent de ordinea în care apar, scrieți interogarea după cum urmează:

db.customers.find (
    { "location" : { $all : [ "Germany", "Austria" ] } }
)
shell

Interogarea valorilor din documente încorporate

În colecția noastră, avem și documente încorporate, care pot fi, de asemenea, generate folosind interogări MongoDB. Pentru a face acest lucru, trebuie să adăugați un punct pentru a semnala MongoDB că un câmp dintr-un document imbricat trebuie analizat. De exemplu, dacă doriți o listă cu toți clienții care au mai mult de zece tranzacții, introduceți următoarele:

db.customers.find (
    { "transactions.total" : { $gt : 10 } }
)
shell

MongoDB accesează documentul „tranzacții” și apoi caută numărul total de tranzacții în „total”.

Cum să limitați rezultatele interogărilor MongoDB

Rezultatele interogărilor MongoDB pot fi destul de extinse, motiv pentru care poate fi util să limitați rezultatele la doar câteva câmpuri. Puteți utiliza proiecții pentru a limita numărul de câmpuri afișate în rezultate. Acestea conțin valoarea 1 (câmpuri care trebuie incluse în rezultate) și 0 (câmpuri care nu trebuie incluse în rezultate).

În exemplul următor, vom efectua o interogare în două părți. Mai întâi, vom iniția o căutare fără parametri folosind metoda find. Aceasta va afișa toate datele din colecție. Cu toate acestea, vom continua imediat cu o proiecție care ia în considerare doar câmpul nume.

db.customers.find (
    { }
    { "name" : 1 }
)
shell

Toți clienții vor fi afișați, dar rezultatul va fi limitat la numele companiilor.

Ce sunt cursorii și cum îi pot folosi în interogările MongoDB?

Cursorii oferă o modalitate de personalizare a modului în care sunt afișate rezultatele interogării Mongo DB, fără a modifica rezultatele efective ale interogării. De exemplu, puteți limita numărul de rezultate afișate sau puteți modifica ordinea acestora. Dacă doriți să afișați doar două dintre rezultate, puteți utiliza metoda limit. Iată cum:

db.customers.find (
    { }
    { "name" : 1 }
).limit ( 2 )
shell

Pentru a sorta rezultatele, puteți utiliza următoarea intrare. Aceasta va afișa cei trei clienți care au comandat cele mai puține produse:

db.customers.find (
    { }
    { "name" : 1 }
).limit ( 2 ) .sort ( { "units" : 1 } )
shell
Sfat

Pentru a găsi un document specific în baza de date, puteți utiliza metoda MongoDB findONE. Explicăm această metodă mai detaliat într-un alt articol din Ghidul nostru digital.

Mergi la meniul principal