MongoDB meetod findOne on suu­re­pä­rane kogumite ot­si­miseks. Siiski tagastab see ainult ühe tulemuse, mistõttu ei sobi see paljude ot­sin­gu­tüü­pide jaoks.

Mis on MongoDB findOne?

MongoDB on and­me­baaside haldamise süsteem, mis suudab tänu NoSQL-lä­he­ne­misele ja mär­ki­mis­väär­sele ska­lee­ri­ta­vu­sele hõlpsasti sal­ves­tada ja hallata suuri and­me­hulki. Kuigi need omadused pakuvad ka­su­ta­ja­tele mär­ki­mis­väär­seid eeliseid, tähendab see ka seda, et süsteem vajab tugevaid meetodeid, et tagada ka­su­ta­jate tõhus na­vi­gee­ri­mine and­me­baasis.

Süsteem salvestab kõik tüüpi andmed BSON-dokumendi (binaarne JSON) vormis ja koondab need do­ku­men­did kogudesse. Kui soovite ühte neist do­ku­men­ti­dest otsida ja väl­jas­tada, on teil mitu võimalust. Lisaks üldi­se­male ot­sin­gu­mee­to­dile MongoDB find on MongoDB findOne väga tõhus meetod suurte and­me­baaside täpseks filt­ree­ri­miseks.

MongoDB findOne otsib kõik do­ku­men­did ja kogud vastavalt kasutaja määratud kri­tee­riumi­dele. Selle meetodi eripäraks on see, et see tagastab alati täpselt ühe dokumendi. Kui ot­sin­gu­pä­rin­gus on ainult üks dokument, ta­gas­ta­takse see dokument. Kui mitu dokumenti vastab kasutaja määratud pa­ra­meet­ri­tele, tagastab MongoDB findOne dokumendi, mis ilmub esimesena and­me­ba­asi loo­mu­li­kus jär­je­kor­ras. Kui otsingust ei leita ühtegi dokumenti, on väl­jun­diks „null”.

Mis on MongoDB findOne’i süntaks?

MongoDB findOne põhiline süntaks on lihtne. Meetodit ka­su­ta­takse järg­mi­selt:

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

Alla <query> võite määrata, kuidas meetod dokumente filt­ree­rima peaks.

Alla <projection> võite määrata, millised väljad peaksid ta­gas­ta­ta­vas do­ku­men­dis kuvatama. Kasutage booli väärtusi 1 (tõene/kaasa arvatud) ja 0 (vale/välja arvatud), et märkida, kas väli peaks olema kaasatud. Kui see pa­ra­mee­ter jääb tühjaks, kuvatakse kõik väljad.

Kolmas ot­sin­gu­pa­ra­mee­ter <options> võimaldab otsingut veelgi täp­sus­tada ja muuta ka kuvatavat teavet. Kõik kolm ot­sin­gu­pa­ra­meet­rit on va­li­ku­li­sed.

Kuidas luua kogumik testimise eesmärgil

Kui olete ins­tal­li­nud MongoDB Linuxi, Windowsi või Maci ja soovite kasutada MongoDB findOne’i, tasub luua test­kesk­kond, et meetodit katsetada.

Kui te pole veel and­me­ba­asi loonud, lugege meie põh­ja­likku MongoDB-õpetust, et õppida, kuidas seda teha. Allpool toodud näites kasutame viie kirje si­sal­da­vat töötajate and­me­ba­asi. Iga kirje sisaldab teavet töötaja nime, soo ja vanuse kohta ning selle kohta, kui kaua isik on et­te­võt­tes töötanud. Kogumik näeb välja järgmine:

# 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

Millised on erinevad viisid otsinguks Mongo DB findOne abil?

MongoDB findOne abil on teabe ot­si­miseks mitu võimalust. Otsida saab ilma pa­ra­meet­ri­teta, ID abil, ühe või mitme välja abil.

Otsimine ilma pa­ra­meet­ri­teta

Kui kasutate MongoDB findOne meetodit ilma pa­ra­meet­ri­teta, otsib süsteem teie and­me­baasist kõik kanded. Meie näites tähendab see, et meetod tuvastab viis kannet. Kuna ükski dokument ei ole vä­lis­ta­tud ja meetod tagastab ainult ühe tulemuse, valib MongoDB findOne esimese isiku, kes and­me­ba­asi sisestati.

db.employee.findOne ( )
shell

Väljund on:

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

Otsimine ID järgi

Ta­va­li­selt soovite oma otsingule min­gi­su­gu­sed kri­tee­riu­mid määrata, et leida just see dokument, mida te­ge­li­kult vajate. Üks viis MongoDB findOne abil dokumente otsida on ID järgi otsida.

Välja _id on igas do­ku­men­dis unikaalne. Meie näites esindab iga ID täpselt ühte töötajat. Kui kasutate MongoDB findOne’i objekti ID abil, saate täpselt soovitud tulemuse.

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

Väljund näeb välja järgmine:

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

Otsimine konk­reet­sete väljade abil

Kui te ei tea ID-d või soovite oma kogust otsida muude pa­ra­meet­rite järgi, võite kasutada ka MongoDB findOne’i, et otsida konk­reet­seid välju. Kui pa­ra­meet­riga sobib ainult üks dokument, kuvatakse just see dokument. Kui aga teie ot­sin­gukri­tee­riumi­dele vastab mitu dokumenti, kuvab süsteem ainult esimese kirje.

Allpool toodud näites otsime kõik kirjed, mille sugu on „Mees”. Siin on käsk:

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

Selle kri­tee­riu­miga vastab kaks kirjet, kuid kuvatakse ainult üks. Väljundis kuvatakse töötaja hr Brown:

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

Otsimine mitme välja abil

Teil on ka võimalus oma otsingut veelgi kit­sen­dada, et vältida kattumisi. Meie väikese valimi puhul ei pruugi see olla vajalik, kuid kui töötate mitme sajandi või isegi tuhandete kirjetega, on see võimalus väga kasulik. MongoDB findOne võimaldab otsinguks kasutada mitut välja. Kui soovite töötajat iden­ti­fit­see­rida soo (mees) ja vanuse järgi, võite kirjutada järgmist:

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

Väljund näitab taas hr Browni, kes on kogus ainus meessoost isik ja 40-aastane. Pr Jones on sama vana, kuid tema sugu ei vasta kri­tee­riumi­dele, seega on tulemus järgmine:

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

Kuidas määrata tin­gi­mu­sed väljale, kasutades MongoDB findOne

Samuti on võimalik mää­rat­leda tin­gi­mu­sed konk­reet­sele väljale ja kasutada neid ot­sin­gukri­tee­riumi­dena. Järgmises näites otsime ainult üle 30-aastaseid töötajaid.

See kanne näeb välja järgmine:

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

See välistab hr Cartwrighti. Kuna pr Smith on üle 30-aastane ja ni­me­kir­jas esimene, kuvatakse tu­le­mu­sena tema:

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

Kuidas välistada väljad MongoDB findOne abil

Kui teil on ula­tus­li­kud kogud, mis si­sal­da­vad palju teavet, võib väljund sisaldada liiga palju teavet. Õnneks pakub MongoDB findOne ka võimalust väl­jun­dist väl­ja­jätta teatud väljad. Järgmises näites ei soovi me väljundis kuvada ID-d, sugu ja vanust.

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

Saate järgmise väljundi:

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

Mis juhtub, kui MongoDB findOne ei leia minu otsingule ühtegi tulemust?

Kui MongoDB findOne-iga ot­sin­gu­tu­le­musi ei leita, kuvatakse ikkagi väljund. Selle il­lust­ree­ri­miseks otsime Ms. Larkhamit, kes ei ole kogus olemas.

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

Selle väljund on:

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

Tasuta GUI MongoDB Compass muudab and­me­ba­asi haldamise liht­sa­maks. Loe graa­fi­lise ka­su­ta­ja­lii­d­ese kohta lähemalt meie di­gi­taalse juhendi teises artiklis.

c601ef95ac62761b8e3583955193ed29

5eba7ed8d4bd7730050a34ca3b643068

cade61e32364b18cfedf411338034385

Go to Main Menu