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 upra­vlja­nje po­dat­kov­nih baz, ki lahko enostavno shranjuje in upravlja velike količine podatkov za­hva­lju­joč svojemu pristopu NoSQL in izjemni ska­la­bil­no­sti. Čeprav ti vidiki upo­rab­ni­kom ponujajo pomembne prednosti, to tudi pomeni, da sistem potrebuje močne metode, da lahko upo­rab­ni­ki učin­ko­vi­to brskajo po po­dat­kov­ni 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 do­ku­men­tov, imate na voljo več možnosti. Poleg splo­šnej­še metode iskanja MongoDB find je MongoDB findOne zelo učin­ko­vi­ta metoda za natančno fil­tri­ra­nje velikih zbirk podatkov.

MongoDB findOne išče vse dokumente in zbirke v skladu z do­lo­če­ni­mi merili, ki jih določi uporabnik. Posebnost te metode je, da vedno vrne natanko en dokument. Če je v iskalnem po­i­zve­do­va­nju samo en dokument, se ta dokument vrne. Če več do­ku­men­tov ustreza pa­ra­me­trom, 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> )
shell

Pod <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 (ne­re­snič­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 spre­mi­nja­nje iskanja in tudi spre­mi­nja­nje prikaza. Vsi trije iskalni parametri so neobvezni.

Kako ustvariti zbirko za namene te­sti­ra­nja

Če ste namestili MongoDB na Linux, Windows ali Mac in želite upo­ra­blja­ti MongoDB findOne, je vredno nastaviti testno okolje, da lahko pre­iz­ku­si­te 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 za­po­sle­nih, ki vsebuje pet vnosov. Vsak vnos vsebuje in­for­ma­ci­je o imenu, spolu in starosti za­po­sle­nih 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
    }
]
)
shell

Kakšni so različni načini iskanja z Mongo DB findOne?

Obstaja več načinov iskanja in­for­ma­cij z uporabo MongoDB findOne. Iskanje lahko izvedete brez pa­ra­me­trov, z ID-jem, z enim poljem ali z več polji.

Iskanje brez pa­ra­me­trov

Če upo­ra­blja­te metodo MongoDB findOne brez pa­ra­me­trov, bo sistem preiskal vašo bazo podatkov in upošteval vse vnose. V našem primeru to pomeni, da bo metoda iden­ti­fi­ci­ra­la 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 ( )
shell

Izhod je:

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

Iskanje po ID

Običajno želite za iskanje določiti nekakšna merila, da na koncu dobite dokument, ki ga dejansko po­tre­bu­je­te. Eden od načinov iskanja do­ku­men­tov z MongoDB findOne je iskanje po ID-ju.

Polje _id je v vsakem dokumentu edin­stve­no. V našem primeru vsaka ID pred­sta­vlja natanko enega za­po­sle­ne­ga. Če izvedete MongoDB findOne z uporabo ID objekta, boste dobili natanko tisti rezultat, ki ga iščete.

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

Izhod je videti takole:

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

Iskanje po določenih poljih

Če ne poznate ID-ja ali želite v svoji zbirki iskati po drugih pa­ra­me­trih, 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 kri­te­ri­jem ustreza več do­ku­men­tov, 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" } )
shell

Obstajata dva vnosa, ki ustrezata tem merilom, vendar bo prikazan le eden. Izpis prikazuje za­po­sle­ne­ga g. Browna:

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

Iskanje po več poljih

Imate tudi možnost, da dodatno omejite iskanje, da pre­pre­či­te morebitna pre­kri­va­nja. 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 iden­ti­fi­ci­ra­ti za­po­sle­ne­ga po spolu (moški) in starosti, lahko napišete naslednje:

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

Rezultat 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
}
shell

Kako 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 na­sle­dnjem primeru iščemo samo zaposlene, starejše od 30 let.

Ta vnos izgleda takole:

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

To iz­klju­ču­je gospoda Car­twri­gh­ta. 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
}
shell

Kako iz­klju­či­ti polja z MongoDB findOne

Če imate obsežne zbirke, ki vsebujejo veliko in­for­ma­cij, lahko izhod vsebuje preveč in­for­ma­cij. Na srečo MongoDB findOne ponuja tudi možnost iz­klju­či­tve polj iz izhoda. V na­sle­dnjem primeru ne želimo v izhodu prikazati ID, spol in starost.

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

Prejeli boste naslednji izpis:

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

Kaj se zgodi, če MongoDB findOne ne najde nobenih re­zul­ta­tov za moje iskanje?

Če za vaše iskanje z MongoDB findOne ni re­zul­ta­tov, se bo izpis še vedno prikazal. Da bi po­na­zo­ri­li, kaj se zgodi, bomo poiskali gospo Larkham, ki ni v zbirki.

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

Rezultat za to je:

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

Brez­plač­ni grafični upo­rab­ni­ški vmesnik MongoDB Compass olajša upra­vlja­nje vaše zbirke podatkov. Več o grafičnem upo­rab­ni­škem vmesniku si preberite v drugem članku v našem di­gi­tal­nem vodniku.

c601ef95ac62761b8e3583955193ed29

5eba7ed8d4bd7730050a34ca3b643068

cade61e32364b18cfedf411338034385

c66347cd1c5b1dc66d9dfb6f8fc74ca3

Go to Main Menu