MongoDB findOne metodas puikiai tinka ko­lek­ci­jai ieškoti. Tačiau jis grąžina tik vieną rezultatą, todėl netinka daugeliui paieškos tipų.

Kas yra MongoDB findOne?

MongoDB yra duomenų bazių valdymo sistema, kuri, naudodama NoSQL metodą ir pa­si­žy­mė­da­ma puikiu mastelio keitimu, gali lengvai saugoti ir valdyti didelius duomenų kiekius. Nors šie aspektai suteikia var­to­to­jams didelių privalumų, tai taip pat reiškia, kad sistemai rei­ka­lin­gi veiks­min­gi metodai, už­tik­ri­nan­tys, kad var­to­to­jai galėtų efek­ty­viai naršyti duomenų bazėje.

Sistema visų tipų duomenis išsaugo BSON dokumento (binarinis JSON) forma ir šiuos do­ku­men­tus sujungia į rinkinius. Jei norite ieškoti ir išvesti vieną iš šių dokumentų, turite keletą galimybių. Be bend­res­nio paieškos metodo MongoDB find, MongoDB findOne yra labai veiks­min­gas metodas, lei­džian­tis tiksliai filtruoti didelius duomenų bazes.

MongoDB findOne ieško visus do­ku­men­tus ir ko­lek­ci­jas pagal tam tikrus vartotojo nurodytus kri­te­ri­jus. Šio metodo ypatumas yra tas, kad jis visada grąžina tik vieną dokumentą. Jei paieškos už­klau­so­je yra tik vienas do­ku­men­tas, bus grąžintas šis do­ku­men­tas. Jei keli do­ku­men­tai atitinka vartotojo nu­sta­ty­tus pa­ra­met­rus, MongoDB findOne grąžins dokumentą, kuris yra pirmasis na­tū­ra­lio­je duomenų bazės tvarkoje. Jei paieškoje nerandama jokių dokumentų, išvestis yra „null“.

Kokia yra MongoDB findOne sintaksė?

Pag­rin­di­nė MongoDB findOne sintaksė yra paprasta. Šis metodas nau­do­ja­mas taip:

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

<query> punkte galite nurodyti, kaip metodas turėtų filtruoti do­ku­men­tus.

<projection> punkte galite nurodyti, kurie laukai turėtų būti rodomi grą­ži­na­ma­me dokumente. Naudokite Būlio vertes 1 (teisinga/įtraukti) ir 0 (klaidinga/ne­įt­rauk­ti), kad nu­ro­dy­tu­mė­te, ar laukas turėtų būti įtrauktas. Jei šis pa­ra­met­ras lieka tuščias, bus rodomi visi laukai.

Trečiasis paieškos pa­ra­met­ras <options> leidžia toliau keisti paiešką ir taip pat keisti rodymą. Visi trys paieškos pa­ra­met­rai yra ne­pri­va­lo­mi.

Kaip sukurti kolekciją bandymams

Jei įdiegėte MongoDB Linux, Windows ar Mac sistemoje ir norite naudoti MongoDB findOne, verta sukurti bandomąją aplinką, kad ga­lė­tu­mė­te išbandyti šį metodą.

Jei dar ne­su­kū­rė­te duomenų bazės, per­skai­ty­ki­te išsamų MongoDB vadovą, kuriame su­ži­no­si­te, kaip ją sukurti. Toliau pa­teik­ta­me pavyzdyje naudosime dar­buo­to­jų duomenų bazę, kurioje yra penki įrašai. Kiek­vie­na­me įraše yra in­for­ma­ci­ja apie dar­buo­to­jo vardą, lytį ir amžių, taip pat apie tai, kiek laiko jis dirba įmonėje. Kolekcija atrodo taip:

# 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

Kokie yra skirtingi paieškos būdai naudojant Mongo DB findOne?

Yra daugiau nei vienas būdas ieškoti in­for­ma­ci­jos naudojant MongoDB findOne. Galite ieškoti be parametrų, pagal ID, pagal vieną lauką arba pagal kelis laukus.

Paieška be parametrų

Jei naudojate MongoDB findOne metodą be jokių parametrų, sistema ieškos jūsų duomenų bazėje ir at­si­žvelgs į visus įrašus. Mūsų pavyzdyje tai reiškia, kad metodas iden­ti­fi­kuos penkis įrašus. Kadangi nė vienas do­ku­men­tas nėra išskirtas ir metodas grąžina tik vieną rezultatą, MongoDB findOne pasirinks pirmąjį asmenį, kuris buvo įvestas į duomenų bazę.

db.employee.findOne ( )
shell

Re­zul­ta­tas yra:

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

Paieška pagal ID

Paprastai norite nurodyti tam tikrus paieškos kri­te­ri­jus, kad ga­lė­tu­mė­te rasti dokumentą, kurio jums iš tiesų reikia. Vienas iš būdų ieškoti dokumentų naudojant MongoDB findOne yra paieška pagal ID.

Laukelis _id yra unikalus kiek­vie­na­me dokumente. Mūsų pavyzdyje kiek­vie­nas ID atitinka vieną dar­buo­to­ją. Jei paleisite MongoDB findOne naudodami objekto ID, gausite tiksliai tokį rezultatą, kokio ieškote.

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

Re­zul­ta­tas atrodo taip:

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

Paieška naudojant konk­re­čius laukus

Jei nežinote ID arba norite ieškoti savo ko­lek­ci­jo­je pagal kitus pa­ra­met­rus, taip pat galite naudoti MongoDB findOne, kad ieš­ko­tu­mė­te konkrečių laukų. Jei yra tik vienas do­ku­men­tas, ati­tin­kan­tis parametrą, bus rodomas būtent tas do­ku­men­tas. Tačiau jei keletas dokumentų atitinka jūsų paieškos kri­te­ri­jus, sistema rodys tik pirmąjį įrašą.

Toliau pa­teik­ta­me pavyzdyje ieškosime visų įrašų, kuriuose lytis nurodyta kaip „Vyras“. Štai komanda:

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

Yra du įrašai, ati­tin­kan­tys šiuos kri­te­ri­jus, tačiau bus rodomas tik vienas. Re­zul­ta­tas rodo dar­buo­to­ją p. Browną:

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

Paieška naudojant kelis laukus

Taip pat galite dar labiau su­siau­rin­ti paiešką, kad iš­veng­tu­mė­te dub­lia­vi­mo­si. Tai gali būti nebūtina mūsų ne­di­de­liam pavyzdžių rinkiniui, bet jei dirbate su keliais šimtais ar net tūks­tan­čiais įrašų, ši funkcija bus labai naudinga. MongoDB findOne leidžia naudoti kelis laukus paieškai. Jei norite iden­ti­fi­kuo­ti dar­buo­to­ją pagal lytį (vyras) ir amžių, galite parašyti taip:

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

Re­zul­ta­tas vėl rodo poną Browną, kuris yra vie­nin­te­lis vyras ir 40 metų amžiaus asmuo ko­lek­ci­jo­je. Ponios Jones amžius yra toks pat, tačiau jos lytis ne­ati­tin­ka kriterijų, todėl re­zul­ta­tas atrodo taip:

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

Kaip nustatyti sąlygas laukui naudojant MongoDB findOne

Taip pat galima apibrėžti konk­re­taus lauko sąlygas ir jas naudoti kaip paieškos kri­te­ri­jus. Toliau pa­teik­ta­me pavyzdyje ieškoma tik vyresnių nei 30 metų dar­buo­to­jų.

Šis įrašas atrodo taip:

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

Tai netaikoma p. Cartw­righ­tui. Kadangi p. Smith yra vyresnė nei 30 metų ir yra pirmoji sąraše, ji rodomas kaip re­zul­ta­tas:

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

Kaip pašalinti laukus naudojant MongoDB findOne

Jei turite dideles ko­lek­ci­jas, kuriose yra daug in­for­ma­ci­jos, išvestis gali būti pernelyg didelė. Laimei, MongoDB findOne taip pat siūlo galimybę iš išvesties pašalinti laukus. Toliau pa­teik­ta­me pavyzdyje nenorime, kad išvestyje būtų rodomas ID, lytis ir amžius.

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

Gausite tokį rezultatą:

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

Kas nutiks, jei MongoDB findOne nerastų jokių mano paieškos rezultatų?

Jei paieška naudojant MongoDB findOne neduos jokių rezultatų, vis tiek bus rodomas išvesties re­zul­ta­tas. Kad pa­aiš­kin­tu­me, kas vyksta, ieškosime ponios Larkham, kurios nėra ko­lek­ci­jo­je.

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

Re­zul­ta­tas yra toks:

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

Nemokama GUI MongoDB Compass pa­leng­vi­na duomenų bazės valdymą. Apie grafinę vartotojo sąsają skai­ty­ki­te kitame mūsų skait­me­ni­nio vadovo straips­ny­je.

c601ef95ac62761b8e3583955193ed29

5eba7ed8d4bd7730050a34ca3b643068

cade61e32364b18cfedf411338034385

c086fc84bdc9922d6c7733b2b40b159c

Go to Main Menu