Kaj je MongoDB findOne in kako ga uporabljati
Metoda MongoDB findOne je odlična za iskanje v zbirki. Vendar pa vrne le en rezultat, zato ni primerna za mnoge vrste iskanja.
Kaj je MongoDB findOne?
MongoDB je sistem za upravljanje podatkovnih baz, ki lahko enostavno shranjuje in upravlja velike količine podatkov zahvaljujoč svojemu pristopu NoSQL in izjemni skalabilnosti. Čeprav ti vidiki uporabnikom ponujajo pomembne prednosti, to tudi pomeni, da sistem potrebuje močne metode, da lahko uporabniki učinkovito brskajo po podatkovni bazi.
Sistem shranjuje podatke vseh vrst v obliki dokumenta BSON (binarni JSON) in te dokumente združuje v zbirke. Če želite poiskati in izpisati enega od teh dokumentov, imate na voljo več možnosti. Poleg splošnejše metode iskanja MongoDB find je MongoDB findOne zelo učinkovita metoda za natančno filtriranje velikih zbirk podatkov.
MongoDB findOne išče vse dokumente in zbirke v skladu z določenimi merili, ki jih določi uporabnik. Posebnost te metode je, da vedno vrne natanko en dokument. Če je v iskalnem poizvedovanju samo en dokument, se ta dokument vrne. Če več dokumentov ustreza parametrom, ki jih določi uporabnik, MongoDB findOne vrne dokument, ki se pojavi prvi v naravnem vrstnem redu zbirke podatkov. Če v iskanju ni mogoče najti nobenega dokumenta, je izhod »null«.
Kakšna je sintaksa za MongoDB findOne?
Osnovna sintaksa MongoDB findOne je preprosta. Metoda se uporablja na naslednji način:
db.collection.findOne ( <query>, <projection>, <options> )shellPod <query> lahko določite, kako naj metoda filtrira dokumente.
Pod <projection> lahko določite, katera polja naj se prikažejo za vrnjeni dokument. Uporabite logični vrednosti 1 (resnično/vključi) in 0 (neresnično/izključi), da označite, ali naj se polje vključi. Če ta parameter ostane prazen, se prikažejo vsa polja.
Tretji iskalni parameter <options> vam omogoča dodatno spreminjanje iskanja in tudi spreminjanje prikaza. Vsi trije iskalni parametri so neobvezni.
Kako ustvariti zbirko za namene testiranja
Če ste namestili MongoDB na Linux, Windows ali Mac in želite uporabljati MongoDB findOne, je vredno nastaviti testno okolje, da lahko preizkusite metodo.
Če še niste nastavili baze podatkov, preberite naš izčrpen MongoDB tutorial, da se naučite, kako jo nastaviti. V našem primeru bomo uporabili bazo podatkov zaposlenih, ki vsebuje pet vnosov. Vsak vnos vsebuje informacije o imenu, spolu in starosti zaposlenih ter o tem, kako dolgo je oseba že zaposlena v podjetju. Zbirka izgleda takole:
# 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
}
]
)shellKakšni so različni načini iskanja z Mongo DB findOne?
Obstaja več načinov iskanja informacij z uporabo MongoDB findOne. Iskanje lahko izvedete brez parametrov, z ID-jem, z enim poljem ali z več polji.
Iskanje brez parametrov
Če uporabljate metodo MongoDB findOne brez parametrov, bo sistem preiskal vašo bazo podatkov in upošteval vse vnose. V našem primeru to pomeni, da bo metoda identificirala pet vnosov. Ker noben dokument ni izključen in metoda vrne le en rezultat, bo MongoDB findOne izbrala prvo osebo, ki je bila vnesena v bazo podatkov.
db.employee.findOne ( )shellIzhod je:
db.employee.findOne ( )
{
_id : ObjectID ( "529ete7300of4002bme148om" ),
name : "Smith",
gender : "Female",
age : 56,
year : 2002
}shellIskanje po ID
Običajno želite za iskanje določiti nekakšna merila, da na koncu dobite dokument, ki ga dejansko potrebujete. Eden od načinov iskanja dokumentov z MongoDB findOne je iskanje po ID-ju.
Polje _id je v vsakem dokumentu edinstveno. V našem primeru vsaka ID predstavlja natanko enega zaposlenega. Če izvedete MongoDB findOne z uporabo ID objekta, boste dobili natanko tisti rezultat, ki ga iščete.
db.employee.findOne ( { _id : ObjectID ( "582pfh773813tw982qj411l0" ) } )shellIzhod je videti takole:
db.employee.findOne ( { _id : ObjectID ( "582pfh773813tw982qj411l0" ) } )
{
_id : ObjectID ( "582pfh773813tw982qj411l0"
name : "Cartwright",
gender : "Male",
age : 22,
year : 2022
}shellIskanje po določenih poljih
Če ne poznate ID-ja ali želite v svoji zbirki iskati po drugih parametrih, lahko za iskanje po določenih poljih uporabite tudi MongoDB findOne. Če obstaja le en dokument, ki ustreza parametru, se bo prikazal ta dokument. Če pa vašim iskalnim kriterijem ustreza več dokumentov, bo sistem prikazal le prvi vnos.
V spodnjem primeru bomo iskali vse vnose, pri katerih je spol »Moški«. Tukaj je ukaz:
db.employee.findOne ( { gender : "Male" } )shellObstajata dva vnosa, ki ustrezata tem merilom, vendar bo prikazan le eden. Izpis prikazuje zaposlenega g. Browna:
db.employee.findOne ( { gender : "Male" } )
{
_id : ObjectID ( "498p0t173mv489fh63th00kh"
name : "Brown",
gender : "Male",
age : 40,
year : 2019
}shellIskanje po več poljih
Imate tudi možnost, da dodatno omejite iskanje, da preprečite morebitna prekrivanja. To morda ni potrebno za naš majhen vzorec, vendar je ta možnost koristna, če delate z več sto ali celo tisoč vnosi. MongoDB findOne vam omogoča, da za iskanje uporabite več polj. Če želite identificirati zaposlenega po spolu (moški) in starosti, lahko napišete naslednje:
db.employee.findOne ( { gender : "Male", age: 40 } )shellRezultat ponovno prikazuje gospoda Browna, ki je edini moški v zbirki in star 40 let. Gospa Jones je enake starosti, vendar njen spol ne ustreza merilom, zato je rezultat takšen:
db.employee.findOne ( { gender : "Male", age: 40 } )
{
_id : ObjectID ( "498p0t173mv489fh63th00kh"
name : "Brown",
gender : "Male",
age : 40,
year : 2019
}shellKako nastaviti pogoje za polje z uporabo MongoDB findOne
Prav tako je mogoče določiti pogoje za določeno polje in jih uporabiti kot iskalna merila. V naslednjem primeru iščemo samo zaposlene, starejše od 30 let.
Ta vnos izgleda takole:
db.employee.findOne ( { age : { $gt : 30 } } )shellTo izključuje gospoda Cartwrighta. Ker je gospa Smith starejša od 30 let in je prva oseba na seznamu, se prikaže kot rezultat:
db.employee.findOne ( { age : { $gt : 30 } } )
{
_id : ObjectID ( "529ete7300of4002bme148om" ),
name : "Smith",
gender : "Female",
age : 56,
year : 2002
}shellKako izključiti polja z MongoDB findOne
Če imate obsežne zbirke, ki vsebujejo veliko informacij, lahko izhod vsebuje preveč informacij. Na srečo MongoDB findOne ponuja tudi možnost izključitve polj iz izhoda. V naslednjem primeru ne želimo v izhodu prikazati ID, spol in starost.
db.employee.findOne ( { name : "Smith" }, { _id : 0, gender : 0, age : 0 } )shellPrejeli boste naslednji izpis:
db.employee.findOne ( { name : "Smith" }, { _id : 0, gender : 0, age : 0 } )
{
name : "Smith",
year : 2002
}shellKaj se zgodi, če MongoDB findOne ne najde nobenih rezultatov za moje iskanje?
Če za vaše iskanje z MongoDB findOne ni rezultatov, se bo izpis še vedno prikazal. Da bi ponazorili, kaj se zgodi, bomo poiskali gospo Larkham, ki ni v zbirki.
db.employee.findOne ( { name : "Larkham" } )shellRezultat za to je:
db.employee.findOne ( { name : "Larkham" } )
nullshellBrezplačni grafični uporabniški vmesnik MongoDB Compass olajša upravljanje vaše zbirke podatkov. Več o grafičnem uporabniškem vmesniku si preberite v drugem članku v našem digitalnem vodniku.
c601ef95ac62761b8e3583955193ed29
5eba7ed8d4bd7730050a34ca3b643068
cade61e32364b18cfedf411338034385
c66347cd1c5b1dc66d9dfb6f8fc74ca3