MongoDB findOne metode ir lieliska ko­lek­ci­jas mek­lē­ša­nai. Tomēr tā atgriež tikai vienu rezultātu, tāpēc tā nav piemērota daudzu veidu mek­lē­ju­miem.

Kas ir MongoDB findOne?

MongoDB ir datu bāzes pār­val­dī­bas sistēma, kas, pa­tei­co­ties NoSQL pieejai un ie­vē­ro­ja­mai mē­ro­go­ja­mī­bai, var viegli uzglabāt un pārvaldīt lielus datu apjomus. Lai gan šie aspekti piedāvā lie­to­tā­jiem nozīmīgas priekš­ro­cī­bas, tas nozīmē arī to, ka sistēmai ir ne­pie­cie­ša­mas spēcīgas metodes, lai no­dro­ši­nā­tu lie­to­tā­jiem efektīvu na­vi­gā­ci­ju datu bāzē.

Sistēma saglabā visa veida datus BSON dokumenta (binārā JSON) formātā un apvieno šos do­ku­men­tus ko­lek­ci­jās. Ja vēlaties meklēt un izvadīt vienu no šiem do­ku­men­tiem, jums ir pieejamas vairākas iespējas. Papildus vis­pā­rī­gā­ka­jai mek­lē­ša­nas metodei MongoDB find, MongoDB findOne ir ļoti efektīva metode, lai precīzi filtrētu lielas datu bāzes.

MongoDB findOne meklē visus do­ku­men­tus un ko­lek­ci­jas at­bil­sto­ši no­teik­tiem lietotāja no­rā­dī­tiem kri­tē­ri­jiem. Šīs metodes īpaša iezīme ir tā, ka tā vienmēr atgriež tieši vienu dokumentu. Ja mek­lē­ša­nas vaicājumā ir tikai viens dokuments, šis dokuments tiks atgriezts. Ja vairāki dokumenti atbilst lietotāja de­fi­nē­ta­jiem pa­ra­met­riem, MongoDB findOne atgriezīs dokumentu, kas parādās pirmais datu bāzes dabiskajā secībā. Ja meklēšanā nevar atrast nevienu dokumentu, izvade ir “null”.

Kāda ir MongoDB findOne sintakse?

MongoDB findOne pamat sintakse ir vienkārša. Metode tiek izmantota šādi:

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

Sadaļā <query> varat norādīt, kā metodei jāfiltrē dokumenti.

Sadaļā <projection> varat norādīt, kuri lauki jāparāda atgrieztā dokumentā. Lai norādītu, vai lauks jāiekļauj, iz­man­to­jiet Boole’a vērtības 1 (patiesība/iekļaut) un 0 (ne­pa­tie­sī­ba/neiekļaut). Ja šis parametrs paliek tukšs, tiks parādīti visi lauki.

Trešais mek­lē­ša­nas parametrs <options> ļauj jums turpināt modificēt meklēšanu un mainīt at­tē­lo­ju­mu. Visi trīs mek­lē­ša­nas parametri ir fa­kul­ta­tī­vi.

Kā izveidot kolekciju tes­tē­ša­nas nolūkos

Ja esat in­sta­lē­jis MongoDB Linux, Windows vai Mac ope­rē­tājsis­tē­mā un vēlaties izmantot MongoDB findOne, ir vērts izveidot testa vidi, lai ek­spe­ri­men­tē­tu ar šo metodi.

Ja vēl neesat iz­vei­do­jis datu bāzi, izlasiet mūsu izsmeļošo MongoDB apmācību, lai uzzinātu, kā to izveidot. Turp­mā­ka­jā piemērā iz­man­to­sim dar­bi­nie­ku datu bāzi, kurā ir pieci ieraksti. Katrs ieraksts satur in­for­mā­ci­ju par dar­bi­nie­ka vārdu, dzimumu un vecumu, kā arī par to, cik ilgi šī persona strādā uzņēmumā. Kolekcija izskatās šādi:

# 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

Kādi ir dažādie veidi, kā veikt meklēšanu ar Mongo DB findOne?

Ir vairāk nekā viens veids, kā meklēt in­for­mā­ci­ju, iz­man­to­jot MongoDB findOne. Jūs varat meklēt bez pa­ra­met­riem, ar ID, ar vienu lauku vai ar vairākiem laukiem.

Meklēšana bez pa­ra­met­riem

Ja iz­man­to­jat MongoDB findOne metodi bez pa­ra­met­riem, sistēma veiks meklēšanu datu bāzē un ņems vērā visus ierakstus. Mūsu piemērā tas nozīmē, ka metode iden­ti­fi­cēs piecus ierakstus. Tā kā neviens no do­ku­men­tiem netiek izslēgts un metode atgriež tikai vienu rezultātu, MongoDB findOne iz­vē­lē­sies pirmo personu, kas tika ievadīta datu bāzē.

db.employee.findOne ( )
shell

Rezultāts ir:

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

Meklēšana pēc iden­ti­fi­kā­ci­jas numura

Parasti jūs vēlaties norādīt kādus mek­lē­ša­nas kri­tē­ri­jus, lai atrastu tieši to dokumentu, kas jums ir ne­pie­cie­šams. Viens no veidiem, kā meklēt do­ku­men­tus ar MongoDB findOne, ir meklēt pēc ID.

Lauciņš _id ir unikāls katrā dokumentā. Mūsu piemērā katrs ID attēlo tieši vienu dar­bi­nie­ku. Ja izpildāt MongoDB findOne, iz­man­to­jot objekta ID, iegūsiet tieši to rezultātu, ko meklējat.

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

Rezultāts izskatās šādi:

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

Meklēšana, iz­man­to­jot konkrētus laukus

Ja nezināt ID vai vēlaties meklēt savā kolekcijā pēc citiem pa­ra­met­riem, varat izmantot arī MongoDB findOne, lai meklētu konkrētus laukus. Ja ir tikai viens dokuments, kas atbilst pa­ra­met­ram, tiks parādīts tieši šis dokuments. Tomēr, ja vairāki dokumenti atbilst jūsu mek­lē­ša­nas kri­tē­ri­jiem, sistēma parādīs tikai pirmo ierakstu.

Zemāk redzamajā piemērā mēs meklēsim visus ierakstus, kuros dzimums ir norādīts kā „Vīrietis”. Šī ir komanda:

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

Ir divi ieraksti, kas atbilst šiem kri­tē­ri­jiem, taču tiks parādīts tikai viens. Rezultātā tiek parādīts dar­bi­nieks Mr. Brown:

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

Meklēšana, iz­man­to­jot vairākus laukus

Jums ir arī iespēja vēl vairāk sa­šau­ri­nāt meklēšanu, lai novērstu pār­klā­ša­nos. Tas var nebūt ne­pie­cie­šams mūsu ne­lie­la­jai paraugu ko­lek­ci­jai, bet, ja jūs strādājat ar vairākiem simtiem vai pat tūk­sto­šiem ierakstu, šī opcija ir ļoti noderīga. MongoDB findOne ļauj mek­lē­ša­nai izmantot vairākus laukus. Ja vēlaties iden­ti­fi­cēt dar­bi­nie­ku pēc dzimuma (vīrietis) un vecuma, varat uzrakstīt šādi:

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

Rezultāts atkal parāda, ka vienīgais vīrietis kolekcijā ir 40 gadus vecais kungs Brauns. Jones kundze ir tāda paša vecuma, bet viņas dzimums neatbilst kri­tē­ri­jiem, tāpēc rezultāts izskatās šādi:

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

Kā iestatīt no­sa­cī­ju­mus laukam, iz­man­to­jot MongoDB findOne

Ir arī iespējams definēt no­sa­cī­ju­mus konkrētam laukam un izmantot tos kā mek­lē­ša­nas kri­tē­ri­jus. Turp­mā­ka­jā piemērā mēs meklējam tikai dar­bi­nie­kus, kuri ir vecāki par 30 gadiem.

Šis ieraksts izskatās šādi:

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

Tas izslēdz Cartwright kungu. Tā kā Smith kundze ir vecāka par 30 gadiem un ir pirmā persona sarakstā, viņa parādās kā rezultāts:

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

Kā izslēgt laukus ar MongoDB findOne

Ja jums ir plašas ko­lek­ci­jas, kas satur daudz in­for­mā­ci­jas, izvade var ietvert pārāk daudz in­for­mā­ci­jas. Par laimi, MongoDB findOne piedāvā arī iespēju izslēgt laukus no izvades. Turp­mā­ka­jā piemērā mēs ne­vē­la­mies izvadē parādīt ID, dzimumu un vecumu.

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

Jūs saņemsiet šādu rezultātu:

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

Kas notiek, ja MongoDB findOne nevar atrast nekādus re­zul­tā­tus manai mek­lē­ša­nai?

Ja meklēšana ar MongoDB findOne nedod re­zul­tā­tus, izvade joprojām tiks parādīta. Lai ilustrētu, kas notiek, meklēsim Ms. Larkham, kura nav kolekcijā.

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

Rezultāts ir šāds:

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

Bezmaksas GUI MongoDB Compass atvieglo datu bāzes pār­val­dī­bu. Lasiet par grafisko lietotāja in­ter­fei­su citā rakstā mūsu di­gi­tā­la­jā ceļvedī.

c601ef95ac62761b8e3583955193ed29

5eba7ed8d4bd7730050a34ca3b643068

cade61e32364b18cfedf411338034385

67bc20db06931714cd37111cf4d09dbe

Go to Main Menu