Dokumentide loendamine MongoDB koondloenduse abil

Dokumentide Loendamine Mongodb Koondloenduse Abil



Nagu nimigi viitab, tuleb väljakirjete loendamiseks kasutada MongoDB-s $counti liitmist. Üks populaarsemaid viise kirjete loendamiseks on kasutada meetodit count(). Lisaks võimaldavad teatud koondamisoperaatorid lugeda kirjeid, mis on toodud koondkonveieri eelmisest etapist. Tänases juhendis käsitleme koodinäidete abil MongoDB loenduste liitmist.

Näide 01

$count toimingu tegemiseks MongoDB andmebaasikogu väljadel peab meil olema palju kirjeid. Seetõttu lõime kogu nimega 'Test' ja sisestasime sellesse funktsiooni insertMany() abil korraga 12 kirjet. Nüüd on selle kogumiku 'Test' kirjed kuvatud funktsiooni find() kaudu MongoDB kestas. Näete, et sellel on kokku kolm välja:_id, nimi ja skoor.

test> db.Test.find({})







Nüüd, et rakendada $count etapi mis tahes väljal, peame kasutama MongoDB koondfunktsiooni käsus 'db'. Koondfunktsioon koosneb tingimuslausest, milles kasutatakse sageli konkreetsel väljal operaatorit $match, millele järgneb uus väli, mis kuvab operaatori $count abil määratud tingimusväljalt saadud koguarvu.



Meie puhul oleme kasutanud operaatorit $match, et otsida punktiväljalt väärtusele „60” vastavaid kirjeid, samas kui operaatorit $count on kasutatud toodud kirjete koguarvu loendamiseks ja nende kuvamiseks uus väli nimega 'SameScore'. Selle päringu väljundis on kuvatud väli 'SameScore' väärtusega '2', mis näitab, et kogus 'Test' on kaks kirjet, mille 'skoor' väärtus '60' on 2.



db.Test.aggregate([ { $match: { 'skoor' : 60 } }, { $count: 'SameScore' } ])

$count liitmist saate kasutada ka muude väljade peale numbrite loendamiseks, näiteks testkogu välja „nimi”. Oleme kasutanud vastete koondamist, et otsida kogust kirjet, mille nimevälja väärtus on „John”. Loendite koondamine on edukalt loendanud sobitatud kirjete koguarvu, mis on 2.





db.Test.aggregate([ { $match: { 'nimi' : 'John' } }, { $count: 'SameName' } ])

Näide 02

Värskendame ülaltoodud päringut ja rakendame teist tingimust erinevate kirjete saamiseks. Seekord rakendame punktiväljal $match liitmist, et saada nende rekordite koguarv, mille skoorivälja väärtus on väiksem kui 30. Loendite liitmisel loendatakse rekordite koguarv ja lisatakse uus arv. veerg 'HinneD'. Väljundis kuvatakse sobitatud väärtuse loendusarvuna tulemus '2'.

db.Test.aggregate( [ { $match: { skoor: { $lt: 30 } } }, { $count: 'HasteD' } ] )

Saate kasutada ka $count liitmist, kui rakendate loogilisi operaatoreid, et täita väljakirjetes rohkem kui 1 tingimus. Seetõttu on väljale „Skoor” rakendatud operaatori $and abil kokku kaks tingimust: gte (suurem või võrdne) ja lte (väiksem ja võrdne). Tulemuse saamiseks ja selle rekordite loendamiseks peavad mõlemad tingimused olema tõesed. Koguarv näitab, et sobivate kriteeriumidega kirjeid on viis.



db.Test.aggregate( [ { $match: { '$ja' : [ { 'skoor' : {$gte: 60 }}, { 'skoor' : {$lte: 80 }} ] }},

{ $count: 'Haste B' } ] )

Näide 03

Ülaltoodud illustratsioonidel oleme kasutanud loenduste liitmist, et saada ainult vastavate väljade väärtuste (nt määratud skoor või nimi) vastavate kirjete arv. MongoDB liitmismeetod võimaldab teil saada kõigi kogus dubleerivaid väärtusi sisaldavate kirjete arvu.

Selleks peate kasutama aggregate funktsiooni käsus $group agregatsiooni, nagu allpool. Välja _id on kasutatud välja „name” määramiseks, millel loenduste koondamine toimiks. Lisaks kasutab NameCount kasutaja määratud väli $count liitmist, et loendada mitu duplikaadi väljal 'nimi'.

Selle päringu väljund on kuvatud allpool. See sisaldab väärtusi väljalt 'nimi' ja nende arvu numbrit väljal NameCount vastavalt väärtuste dubleerimisele, näiteks Cillianil on 4 duplikaati ja nii edasi.

db.Test.aggregate([ { $group: { _id: '$name' , NameCount: { $count: {} }, }, }, ])

Näide 04

Konkreetsete välja väärtuste loendamiseks saame kasutada ka pesastatud väljakirjete loenduste liitmist. Selle täpsustamiseks oleme loonud kollektsiooni nimega „Teacher“ ja lisanud sellesse pesastatud välja „alam“ ja massiivi tüüpi välja „nihe“ koos teiste väljadega: nimi ja tasu. Funktsioon find() on kuvanud selle kogu kõik viis kirjet.

test> db.Teacher.find({})

Nüüd oleme rakendanud vasteoperaatorit sisaldava koondfunktsiooni. Samuti on operaator $ja rakendatud välja 'sub' alamväljale 'matemaatika', mis sisaldab kahte erinevat tingimust. Seejärel on arve arvutatud. Väljund näitab, et on kaks kirjet, mille alamvälja matemaatika väärtus on suurem kui 10 ja vähem kui 20.

db.Teacher.aggregate( [ { $match: { '$ja' : [ { 'alam.matemaatika' : {$gte: 10 }}, { 'alam.matemaatika' : {$lte: kakskümmend }} ] }}, { $count: 'Haste A' } ] )

Näide 05

Vaatame viimast näidet, et illustreerida funktsiooni count() kasutamist seekord loenduste liitmise asemel. Seega on funktsioon count() rakendatud kogu “Teacher” massiivitüüpi väljale, st “shift”. Kasutades indeksit 2 kasutava massiivivälja indekseid, oleme määranud sobivuskriteeriumiks 'öö'. See väljastab '2' kui kirje 'öö' loenduste koguarvu.

db.Teacher.count({ 'shift.2' : 'öö' })

Väga sarnasel viisil saab funktsiooni count() rakendada ka pesastatud väljadele, näiteks kogust 'Teacher' oleva 'sub' välja alamväljale 'phy'. Oleme määranud sobivuskriteeriumid, kasutades operaatorit 'lte', mis näitab alamväljal 'phy' väärtusi, mis on väiksemad kui 14. Selle juhise väljund on kuvanud '2', st 4 kirjet väärtusega alla 14.

db.Teacher.count( { 'sub.phy' : { $lte: 14 } })

Järeldus

Selles juhendis on mitmete koodinäidetega demonstreeritud ja üksikasjalikult käsitletud MongoDB $count koondamise kasutamist. Näited hõlmavad loenduste liitmise tähendust konkreetsete väärtuskirjete loendusnumbri toomiseks ja kõigi kogude kaudu olevate väljakirjete jaoks. Samuti hõlmab see loenduste liitmise kasutamist massiiviväljadel ja manustatud (pesastatud) väljadel. Lõpuks on lisatud funktsiooni count() näide, et teha vahet loenduse liitmise ja loendusfunktsiooni vahel.