Metoda findOne din MongoDB este excelentă pentru căutarea într-o colecție. Cu toate acestea, ea returnează un singur rezultat, ceea ce o face nepotrivită pentru multe tipuri de căutări.

Ce este MongoDB findOne?

MongoDB este un sistem de gestionare a bazelor de date care poate stoca și gestiona cu ușurință cantități mari de date datorită abordării NoSQL și scalabilității remarcabile. Deși aceste aspecte oferă utilizatorilor avantaje semnificative, ele înseamnă totodată că sistemul are nevoie de metode solide pentru a se asigura că utilizatorii pot naviga eficient în baza de date.

Sistemul salvează date de toate tipurile sub forma unui document BSON (binary JSON) și grupează aceste documente în colecții. Dacă doriți să căutați și să afișați unul dintre aceste documente, aveți la dispoziție mai multe opțiuni. În plus față de metoda de căutare mai generală MongoDB find, MongoDB findOne este o metodă extrem de eficientă pentru filtrarea cu precizie a bazelor de date mari.

MongoDB findOne caută toate documentele și colecțiile în conformitate cu anumite criterii specificate de utilizator. Caracteristica specială a acestei metode este că returnează întotdeauna exact un singur document. Dacă există un singur document în interogarea de căutare, acest document va fi returnat. Dacă mai multe documente corespund parametrilor definiți de utilizator, MongoDB findOne va returna documentul care apare primul în ordinea naturală a bazei de date. Dacă nu se găsesc documente în căutare, rezultatul este „null”.

Care este sintaxa pentru MongoDB findOne?

Sintaxa de bază a MongoDB findOne este simplă. Metoda se utilizează astfel:

db.collection.findOne ( <query>, <projection>, <options> )
shell

Sub <query>, puteți specifica modul în care metoda trebuie să filtreze documentele.

Sub <projection>, puteți specifica câmpurile care trebuie afișate pentru documentul returnat. Utilizați valorile booleene 1 (adevărat/include) și 0 (fals/exclude) pentru a indica dacă un câmp trebuie inclus. Dacă acest parametru rămâne gol, vor fi afișate toate câmpurile.

Al treilea parametru de căutare <options> vă permite să modificați în continuare căutarea și să schimbați afișarea. Toți cei trei parametri de căutare sunt opționali.

Cum se creează o colecție în scopuri de testare

Dacă ați instalat MongoDB pe Linux, Windows sau Mac și doriți să utilizați MongoDB findOne, merită să configurați un mediu de testare pentru a experimenta metoda.

Dacă nu ați configurat încă o bază de date, citiți tutorialul nostru complet despre MongoDB pentru a afla cum să configurați una. În exemplul de mai jos, vom folosi o bază de date cu angajați care conține cinci intrări. Fiecare intrare conține informații despre numele, sexul și vârsta angajaților, precum și vechimea persoanei în companie. Colecția arată astfel:

# Create Collection
db.employee.insertMany ( [
    {
    name : "Smith",
    gender : "Female",
    age : 56,
    year : 2002
    },
    {
    name : "Jones",
    gender : "Female",
    age : 40,
    year : 2017,
    },
    {
    name : "Brown",
    gender : "Male",
    age : 40,
    year : 2019
    },
    {
    name : "Michaels",
    gender : "Female",
    age : 44,
    year : 2015
    },
    name : "Cartwright",
    gender : "Male",
    age : 22,
    year : 2022
    }
]
)
shell

Care sunt diferitele moduri de căutare cu Mongo DB findOne?

Există mai multe moduri de a căuta informații folosind MongoDB findOne. Puteți căuta fără parametri, cu un ID, cu un singur câmp sau cu mai multe câmpuri.

Căutare fără parametri

Dacă utilizați metoda MongoDB findOne fără parametri, sistemul va căuta în baza de date și va lua în considerare toate intrările. În exemplul nostru, aceasta înseamnă că metoda va identifica cinci intrări. Deoarece niciunul dintre documente nu este exclus și metoda returnează un singur rezultat, MongoDB findOne va selecta prima persoană care a fost introdusă în baza de date.

db.employee.findOne ( )
shell

Rezultatul este:

db.employee.findOne ( )
{
    _id : ObjectID ( "529ete7300of4002bme148om" ),
    name : "Smith",
    gender : "Female",
    age : 56,
    year : 2002
}
shell

1

În mod normal, doriți să furnizați anumite criterii pentru căutare, astfel încât să obțineți documentul de care aveți nevoie. O modalitate de a căuta documente cu MongoDB findOne este căutarea unui ID.

Câmpul _id este unic în fiecare document. În exemplul nostru, fiecare ID reprezintă exact un angajat. Dacă executați MongoDB findOne folosind ID-ul obiectului, veți obține exact rezultatul pe care îl căutați.

db.employee.findOne ( { _id : ObjectID ( "582pfh773813tw982qj411l0" ) } )
shell

Rezultatul arată astfel:

db.employee.findOne ( { _id : ObjectID ( "582pfh773813tw982qj411l0" ) } )
{
    _id : ObjectID ( "582pfh773813tw982qj411l0"
    name : "Cartwright",
    gender : "Male",
    age : 22,
    year : 2022
}
shell

Căutarea folosind câmpuri specifice

Dacă nu cunoașteți ID-ul sau doriți să căutați în colecția dvs. după alți parametri, puteți utiliza și MongoDB findOne pentru a căuta câmpuri specifice. Dacă există un singur document care corespunde parametrului, acesta va fi afișat. Cu toate acestea, dacă mai multe documente corespund criteriilor dvs. de căutare, sistemul va afișa doar prima intrare.

În exemplul de mai jos, vom căuta toate intrările cu „Male” ca gen. Iată comanda:

db.employee.findOne ( { gender : "Male" } )
shell

Există două intrări care corespund acestor criterii, însă va fi afișată doar una. Rezultatul afișează angajatul domnul Brown:

db.employee.findOne ( { gender : "Male" } )
{
    _id : ObjectID ( "498p0t173mv489fh63th00kh"
    name : "Brown",
    gender : "Male",
    age : 40,
    year : 2019
}
shell

Căutarea folosind mai multe câmpuri

De asemenea, aveți opțiunea de a restrânge și mai mult căutarea pentru a preveni suprapunerile. Este posibil ca acest lucru să nu fie necesar pentru colecția noastră mică de eșantioane, dar dacă lucrați cu câteva sute sau chiar mii de intrări, această opțiune este foarte utilă. MongoDB findOne vă permite să utilizați mai multe câmpuri pentru căutare. Dacă doriți să identificați un angajat după sex (masculin) și vârstă, puteți scrie următoarele:

db.employee.findOne ( { gender : "Male", age: 40 } )
shell

Rezultatul arată din nou că domnul Brown este singura persoană din colecție care este bărbat și are 40 de ani. Doamna Jones are aceeași vârstă, dar sexul ei nu corespunde criteriilor, astfel încât rezultatul arată astfel:

db.employee.findOne ( { gender : "Male", age: 40 } )
{
    _id : ObjectID ( "498p0t173mv489fh63th00kh"
    name : "Brown",
    gender : "Male",
    age : 40,
    year : 2019
}
shell

Cum se setează condiții pentru un câmp folosind MongoDB findOne

De asemenea, este posibil să definiți condiții pentru un câmp specific și să le utilizați ca criterii de căutare. În exemplul următor, căutăm doar angajați cu vârsta peste 30 de ani.

Această intrare arată astfel:

db.employee.findOne ( { age : { $gt : 30 } } )
shell

Acest lucru îl exclude pe domnul Cartwright. Deoarece doamna Smith are peste 30 de ani și este prima persoană din listă, ea apare ca rezultat:

db.employee.findOne ( { age : { $gt : 30 } } )
{
    _id : ObjectID ( "529ete7300of4002bme148om" ),
    name : "Smith",
    gender : "Female",
    age : 56,
    year : 2002
}
shell

Cum să excludeți câmpuri cu MongoDB findOne

Dacă aveți colecții extinse care conțin multe informații, rezultatul poate include prea multe informații. Din fericire, MongoDB findOne oferă și opțiunea de a exclude câmpuri din rezultat. În exemplul următor, nu dorim să afișăm ID-ul, sexul și vârsta în rezultat.

db.employee.findOne ( { name : "Smith" }, { _id : 0, gender : 0, age : 0 } )
shell

Veți primi următorul rezultat:

db.employee.findOne ( { name : "Smith" }, { _id : 0, gender : 0, age : 0 } )
{
    name : "Smith",
    year : 2002
}
shell

Ce se întâmplă dacă MongoDB findOne nu găsește niciun rezultat pentru căutarea mea?

Dacă nu există rezultate pentru căutarea dvs. cu MongoDB findOne, va fi afișat totuși un rezultat. Pentru a ilustra ce se întâmplă, vom căuta pe doamna Larkham, care nu se află în colecție.

db.employee.findOne ( { name : "Larkham" }  )
shell

Rezultatul pentru aceasta este:

db.employee.findOne ( { name : "Larkham" }  )
null
shell
Sfat

Interfața grafică gratuită MongoDB Compass facilitează gestionarea bazei de date. Citiți despre interfața grafică pentru utilizatori într-un alt articol din Ghidul nostru digital.

Mergi la meniul principal