Čo je MongoDB findOne a ako ho používať
Metóda MongoDB findOne je skvelá na vyhľadávanie v kolekcii. Vráti však len jeden výsledok, čo ju robí nevhodnou pre mnoho typov vyhľadávania.
Čo je MongoDB findOne?
MongoDB je systém správy databáz, ktorý vďaka svojmu prístupu NoSQL a pozoruhodnej škálovateľnosti dokáže ľahko ukladať a spravovať veľké množstvá údajov. Hoci tieto aspekty ponúkajú používateľom významné výhody, zároveň to znamená, že systém potrebuje silné metódy, aby používatelia mohli efektívne navigovať v databáze.
Systém ukladá všetky typy údajov vo forme dokumentu BSON (binárny JSON) a zoskupuje tieto dokumenty do zbierok. Ak chcete vyhľadávať a vypisovať jeden z týchto dokumentov, máte k dispozícii niekoľko možností. Okrem všeobecnejšej metódy vyhľadávania MongoDB find je MongoDB findOne vysoko efektívnou metódou na presné filtrovanie veľkých databáz.
MongoDB findOne vyhľadáva všetky dokumenty a zbierky podľa určitých kritérií špecifikovaných používateľom. Špeciálnou vlastnosťou tejto metódy je, že vždy vráti presne jeden dokument. Ak je vo vyhľadávacom dotaze len jeden dokument, tento dokument bude vrátený. Ak viacero dokumentov zodpovedá parametrom definovaným používateľom, MongoDB findOne vráti dokument, ktorý sa nachádza na prvom mieste v prirodzenom poradí databázy. Ak sa vo vyhľadávaní nenájdu žiadne dokumenty, výstupom je „null“.
Aká je syntax pre MongoDB findOne?
Základná syntax MongoDB findOne je jednoduchá. Metóda sa používa takto:
db.collection.findOne ( <query>, <projection>, <options> )shellV časti <query> môžete určiť, ako má metóda filtrovať dokumenty.
V <projection> môžete určiť, ktoré polia sa majú zobraziť pre vrátený dokument. Použite boolovské hodnoty 1 (true/include) a 0 (false/exclude) na označenie, či sa má pole zahrnúť. Ak tento parameter zostane prázdny, zobrazia sa všetky polia.
Tretí vyhľadávací parameter <options> vám umožňuje ďalej upravovať vyhľadávanie a tiež zmeniť zobrazenie. Všetky tri vyhľadávacie parametre sú voliteľné.
Ako vytvoriť zbierku na testovacie účely
Ak ste nainštalovali MongoDB na Linux, Windows alebo Mac a chcete používať MongoDB findOne, stojí za to nastaviť testovacie prostredie, aby ste mohli s touto metódou experimentovať.
Ak ste ešte nenastavili databázu, prečítajte si náš komplexný návod na MongoDB, kde sa dozviete, ako ju nastaviť. V našom príklade nižšie použijeme databázu zamestnancov obsahujúcu päť záznamov. Každý záznam obsahuje informácie o mene, pohlaví a veku zamestnancov, ako aj o tom, ako dlho daná osoba pracuje v spoločnosti. Zbierka vyzerá takto:
# 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
}
]
)shellAké sú rôzne spôsoby vyhľadávania pomocou Mongo DB findOne?
Existuje viac ako jeden spôsob vyhľadávania informácií pomocou MongoDB findOne. Môžete vyhľadávať bez parametrov, s ID, s jedným poľom alebo s viacerými poľami.
Vyhľadávanie bez parametrov
Ak používate metódu MongoDB findOne bez akýchkoľvek parametrov, systém prehľadá vašu databázu a zohľadní všetky záznamy. V našom príklade to znamená, že metóda identifikuje päť záznamov. Keďže žiadny z dokumentov nie je vylúčený a metóda vráti len jeden výsledok, MongoDB findOne vyberie prvú osobu, ktorá bola vložená do databázy.
db.employee.findOne ( )shellVýstup je:
db.employee.findOne ( )
{
_id : ObjectID ( "529ete7300of4002bme148om" ),
name : "Smith",
gender : "Female",
age : 56,
year : 2002
}shellVyhľadávanie podľa ID
Zvyčajne chcete pre vyhľadávanie zadať nejaké kritériá, aby ste našli dokument, ktorý skutočne potrebujete. Jedným zo spôsobov, ako vyhľadávať dokumenty pomocou MongoDB findOne, je vyhľadávanie podľa ID.
Pole _id je v každom dokumente jedinečné. V našom príklade každé ID predstavuje presne jedného zamestnanca. Ak spustíte MongoDB findOne pomocou ID objektu, dostanete presný výsledok, ktorý hľadáte.
db.employee.findOne ( { _id : ObjectID ( "582pfh773813tw982qj411l0" ) } )shellVýstup vyzerá takto:
db.employee.findOne ( { _id : ObjectID ( "582pfh773813tw982qj411l0" ) } )
{
_id : ObjectID ( "582pfh773813tw982qj411l0"
name : "Cartwright",
gender : "Male",
age : 22,
year : 2022
}shellVyhľadávanie pomocou špecifických polí
Ak nepoznáte ID alebo chcete vo svojej zbierke vyhľadávať podľa iných parametrov, môžete použiť aj MongoDB findOne na vyhľadávanie konkrétnych polí. Ak existuje len jeden dokument, ktorý zodpovedá parametru, zobrazí sa práve tento dokument. Ak však viacero dokumentov zodpovedá vašim vyhľadávacím kritériám, systém zobrazí len prvý záznam.
V nasledujúcom príklade budeme hľadať všetky záznamy, kde je ako pohlavie uvedené „Male“ (muž). Tu je príkaz:
db.employee.findOne ( { gender : "Male" } )shellExistujú dva záznamy, ktoré zodpovedajú týmto kritériám, ale zobrazí sa len jeden. Výstup zobrazuje zamestnanca pána Browna:
db.employee.findOne ( { gender : "Male" } )
{
_id : ObjectID ( "498p0t173mv489fh63th00kh"
name : "Brown",
gender : "Male",
age : 40,
year : 2019
}shellVyhľadávanie pomocou viacerých polí
Máte tiež možnosť ďalej zúžiť vyhľadávanie, aby ste zabránili akémukoľvek prekrývaniu. V prípade našej malej vzorky to nemusí byť potrebné, ale ak pracujete s niekoľkými stovkami alebo dokonca tisíckami záznamov, táto možnosť sa vám môže hodiť. MongoDB findOne vám umožňuje použiť na vyhľadávanie viacero polí. Ak chcete identifikovať zamestnanca podľa pohlavia (muž) a veku, môžete napísať nasledujúce:
db.employee.findOne ( { gender : "Male", age: 40 } )shellVýsledok opäť ukazuje pána Browna, ktorý je jediným mužom vo veku 40 rokov v tejto kolekcii. Pani Jonesová je v rovnakom veku, ale jej pohlavie nezodpovedá kritériám, takže výsledok vyzerá takto:
db.employee.findOne ( { gender : "Male", age: 40 } )
{
_id : ObjectID ( "498p0t173mv489fh63th00kh"
name : "Brown",
gender : "Male",
age : 40,
year : 2019
}shellAko nastaviť podmienky pre pole pomocou MongoDB findOne
Je tiež možné definovať podmienky pre konkrétne pole a použiť ich ako vyhľadávacie kritériá. V nasledujúcom príklade vyhľadávame len zamestnancov, ktorí majú viac ako 30 rokov.
Tento záznam vyzerá takto:
db.employee.findOne ( { age : { $gt : 30 } } )shellTo vylučuje pána Cartwrighta. Keďže pani Smithová má viac ako 30 rokov a je prvá v zozname, objaví sa ako výsledok:
db.employee.findOne ( { age : { $gt : 30 } } )
{
_id : ObjectID ( "529ete7300of4002bme148om" ),
name : "Smith",
gender : "Female",
age : 56,
year : 2002
}shell1
Ak máte rozsiahle zbierky, ktoré obsahujú veľa informácií, výstup môže obsahovať príliš veľa informácií. Našťastie MongoDB findOne ponúka aj možnosť vylúčiť polia z výstupu. V nasledujúcom príklade nechceme vo výstupe zobraziť ID, pohlavie a vek.
db.employee.findOne ( { name : "Smith" }, { _id : 0, gender : 0, age : 0 } )shellZískate nasledujúci výstup:
db.employee.findOne ( { name : "Smith" }, { _id : 0, gender : 0, age : 0 } )
{
name : "Smith",
year : 2002
}shellČo sa stane, ak MongoDB findOne nenájde žiadne výsledky pre moje vyhľadávanie?
Ak vyhľadávanie pomocou MongoDB findOne neprinesie žiadne výsledky, výstup sa aj tak zobrazí. Aby sme ilustrovali, čo sa stane, vyhľadáme pani Larkhamovú, ktorá nie je v zbierke.
db.employee.findOne ( { name : "Larkham" } )shellVýstupom je:
db.employee.findOne ( { name : "Larkham" } )
nullshellBezplatné grafické používateľské rozhranie MongoDB Compass uľahčuje správu vašej databázy. Prečítajte si o grafickom používateľskom rozhraní v inom článku v našom digitálnom sprievodcovi.