Kas yra MongoDB findOne ir kaip jį naudoti
MongoDB findOne metodas puikiai tinka kolekcijai 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 pasižymėdama puikiu mastelio keitimu, gali lengvai saugoti ir valdyti didelius duomenų kiekius. Nors šie aspektai suteikia vartotojams didelių privalumų, tai taip pat reiškia, kad sistemai reikalingi veiksmingi metodai, užtikrinantys, kad vartotojai galėtų efektyviai naršyti duomenų bazėje.
Sistema visų tipų duomenis išsaugo BSON dokumento (binarinis JSON) forma ir šiuos dokumentus sujungia į rinkinius. Jei norite ieškoti ir išvesti vieną iš šių dokumentų, turite keletą galimybių. Be bendresnio paieškos metodo MongoDB find, MongoDB findOne yra labai veiksmingas metodas, leidžiantis tiksliai filtruoti didelius duomenų bazes.
MongoDB findOne ieško visus dokumentus ir kolekcijas pagal tam tikrus vartotojo nurodytus kriterijus. Šio metodo ypatumas yra tas, kad jis visada grąžina tik vieną dokumentą. Jei paieškos užklausoje yra tik vienas dokumentas, bus grąžintas šis dokumentas. Jei keli dokumentai atitinka vartotojo nustatytus parametrus, MongoDB findOne grąžins dokumentą, kuris yra pirmasis natūralioje duomenų bazės tvarkoje. Jei paieškoje nerandama jokių dokumentų, išvestis yra „null“.
Kokia yra MongoDB findOne sintaksė?
Pagrindinė MongoDB findOne sintaksė yra paprasta. Šis metodas naudojamas taip:
db.collection.findOne ( <query>, <projection>, <options> )shell<query> punkte galite nurodyti, kaip metodas turėtų filtruoti dokumentus.
<projection> punkte galite nurodyti, kurie laukai turėtų būti rodomi grąžinamame dokumente. Naudokite Būlio vertes 1 (teisinga/įtraukti) ir 0 (klaidinga/neįtraukti), kad nurodytumėte, ar laukas turėtų būti įtrauktas. Jei šis parametras lieka tuščias, bus rodomi visi laukai.
Trečiasis paieškos parametras <options> leidžia toliau keisti paiešką ir taip pat keisti rodymą. Visi trys paieškos parametrai yra neprivalomi.
Kaip sukurti kolekciją bandymams
Jei įdiegėte MongoDB Linux, Windows ar Mac sistemoje ir norite naudoti MongoDB findOne, verta sukurti bandomąją aplinką, kad galėtumėte išbandyti šį metodą.
Jei dar nesukūrėte duomenų bazės, perskaitykite išsamų MongoDB vadovą, kuriame sužinosite, kaip ją sukurti. Toliau pateiktame pavyzdyje naudosime darbuotojų duomenų bazę, kurioje yra penki įrašai. Kiekviename įraše yra informacija apie darbuotojo 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
}
]
)shellKokie yra skirtingi paieškos būdai naudojant Mongo DB findOne?
Yra daugiau nei vienas būdas ieškoti informacijos 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 atsižvelgs į visus įrašus. Mūsų pavyzdyje tai reiškia, kad metodas identifikuos penkis įrašus. Kadangi nė vienas dokumentas 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 ( )shellRezultatas yra:
db.employee.findOne ( )
{
_id : ObjectID ( "529ete7300of4002bme148om" ),
name : "Smith",
gender : "Female",
age : 56,
year : 2002
}shellPaieška pagal ID
Paprastai norite nurodyti tam tikrus paieškos kriterijus, kad galėtumė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 kiekviename dokumente. Mūsų pavyzdyje kiekvienas ID atitinka vieną darbuotoją. Jei paleisite MongoDB findOne naudodami objekto ID, gausite tiksliai tokį rezultatą, kokio ieškote.
db.employee.findOne ( { _id : ObjectID ( "582pfh773813tw982qj411l0" ) } )shellRezultatas atrodo taip:
db.employee.findOne ( { _id : ObjectID ( "582pfh773813tw982qj411l0" ) } )
{
_id : ObjectID ( "582pfh773813tw982qj411l0"
name : "Cartwright",
gender : "Male",
age : 22,
year : 2022
}shellPaieška naudojant konkrečius laukus
Jei nežinote ID arba norite ieškoti savo kolekcijoje pagal kitus parametrus, taip pat galite naudoti MongoDB findOne, kad ieškotumėte konkrečių laukų. Jei yra tik vienas dokumentas, atitinkantis parametrą, bus rodomas būtent tas dokumentas. Tačiau jei keletas dokumentų atitinka jūsų paieškos kriterijus, sistema rodys tik pirmąjį įrašą.
Toliau pateiktame pavyzdyje ieškosime visų įrašų, kuriuose lytis nurodyta kaip „Vyras“. Štai komanda:
db.employee.findOne ( { gender : "Male" } )shellYra du įrašai, atitinkantys šiuos kriterijus, tačiau bus rodomas tik vienas. Rezultatas rodo darbuotoją p. Browną:
db.employee.findOne ( { gender : "Male" } )
{
_id : ObjectID ( "498p0t173mv489fh63th00kh"
name : "Brown",
gender : "Male",
age : 40,
year : 2019
}shellPaieška naudojant kelis laukus
Taip pat galite dar labiau susiaurinti paiešką, kad išvengtumėte dubliavimosi. Tai gali būti nebūtina mūsų nedideliam pavyzdžių rinkiniui, bet jei dirbate su keliais šimtais ar net tūkstančiais įrašų, ši funkcija bus labai naudinga. MongoDB findOne leidžia naudoti kelis laukus paieškai. Jei norite identifikuoti darbuotoją pagal lytį (vyras) ir amžių, galite parašyti taip:
db.employee.findOne ( { gender : "Male", age: 40 } )shellRezultatas vėl rodo poną Browną, kuris yra vienintelis vyras ir 40 metų amžiaus asmuo kolekcijoje. Ponios Jones amžius yra toks pat, tačiau jos lytis neatitinka kriterijų, todėl rezultatas atrodo taip:
db.employee.findOne ( { gender : "Male", age: 40 } )
{
_id : ObjectID ( "498p0t173mv489fh63th00kh"
name : "Brown",
gender : "Male",
age : 40,
year : 2019
}shellKaip nustatyti sąlygas laukui naudojant MongoDB findOne
Taip pat galima apibrėžti konkretaus lauko sąlygas ir jas naudoti kaip paieškos kriterijus. Toliau pateiktame pavyzdyje ieškoma tik vyresnių nei 30 metų darbuotojų.
Šis įrašas atrodo taip:
db.employee.findOne ( { age : { $gt : 30 } } )shellTai netaikoma p. Cartwrightui. Kadangi p. Smith yra vyresnė nei 30 metų ir yra pirmoji sąraše, ji rodomas kaip rezultatas:
db.employee.findOne ( { age : { $gt : 30 } } )
{
_id : ObjectID ( "529ete7300of4002bme148om" ),
name : "Smith",
gender : "Female",
age : 56,
year : 2002
}shellKaip pašalinti laukus naudojant MongoDB findOne
Jei turite dideles kolekcijas, kuriose yra daug informacijos, išvestis gali būti pernelyg didelė. Laimei, MongoDB findOne taip pat siūlo galimybę iš išvesties pašalinti laukus. Toliau pateiktame pavyzdyje nenorime, kad išvestyje būtų rodomas ID, lytis ir amžius.
db.employee.findOne ( { name : "Smith" }, { _id : 0, gender : 0, age : 0 } )shellGausite tokį rezultatą:
db.employee.findOne ( { name : "Smith" }, { _id : 0, gender : 0, age : 0 } )
{
name : "Smith",
year : 2002
}shellKas 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 rezultatas. Kad paaiškintume, kas vyksta, ieškosime ponios Larkham, kurios nėra kolekcijoje.
db.employee.findOne ( { name : "Larkham" } )shellRezultatas yra toks:
db.employee.findOne ( { name : "Larkham" } )
nullshellNemokama GUI MongoDB Compass palengvina duomenų bazės valdymą. Apie grafinę vartotojo sąsają skaitykite kitame mūsų skaitmeninio vadovo straipsnyje.
c601ef95ac62761b8e3583955193ed29
5eba7ed8d4bd7730050a34ca3b643068
cade61e32364b18cfedf411338034385
c086fc84bdc9922d6c7733b2b40b159c