Documenten tellen met MongoDB Aggregate Count

Documenten Tellen Met Mongodb Aggregate Count



Zoals de naam al doet vermoeden, moet de aggregatie $count in MongoDB worden gebruikt voor het tellen van veldrecords. Een van de populaire manieren om records te tellen is door de methode count() te gebruiken. Bovendien kunt u met bepaalde aggregatieoperatoren records tellen die zijn binnengebracht vanuit een voorgaande fase van de aggregatiepijplijn. In deze handleiding van vandaag bespreken we de tellingsaggregatie van MongoDB met behulp van codevoorbeelden.

Voorbeeld 01

Om de bewerking $count uit te voeren op de velden van een databaseverzameling in MongoDB, hebben we meerdere records nodig. Daarom hebben we een verzameling gemaakt met de naam “Test” en daar tegelijkertijd 12 records ingevoegd met behulp van de functie insertMany(). Nu zijn de records van deze 'Test' -verzameling weergegeven op de MongoDB-shell via de functiequery find(). Je kunt zien dat het in totaal drie velden heeft: _id, naam en score.

test> db.Test.find({})







Om nu de $count-fase op elk veld toe te passen, moeten we de aggregatiefunctie van MongoDB gebruiken binnen de 'db' -instructie. De aggregatiefunctie bestaat uit de voorwaarde-instructie, waarbij vaak de $match-operator voor een specifiek veld wordt gebruikt, gevolgd door een nieuw veld dat het totale aantal weergeeft dat is verkregen uit het opgegeven voorwaardeveld met behulp van de $count-operator.



In ons geval hebben we de operator $match gebruikt om te zoeken naar de overeenkomende records voor de waarde “60” in het scoreveld, terwijl de operator $count is gebruikt om het totale aantal opgehaalde records te tellen en deze onder het veld weer te geven. nieuw veld met de naam “SameScore”. De uitvoer voor deze query toont een veld ‘SameScore’ met de waarde ‘2’, wat aangeeft dat er twee records zijn met de ‘score’-waarde ‘60’ is 2 in de verzameling ‘Test’.



db.Test.aggregate([ { $match: { 'scoren' : 60 } }, { $count: 'Dezelfde score' } ])

U kunt ook de aggregatie $count gebruiken om andere velden dan getallen te tellen, zoals het veld 'naam' van de testverzameling. We hebben matchaggregatie gebruikt om te zoeken naar de record in de collectie waarvan het naamveld de waarde 'John' heeft. De tellingsaggregatie heeft met succes het totale aantal overeenkomende records geteld, namelijk 2.





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

Voorbeeld 02

Laten we de bovenstaande zoekopdracht bijwerken en een andere voorwaarde toepassen om andere records te krijgen. Deze keer passen we de aggregatie $match van het scoreveld toe om het totale aantal records te verkrijgen waarbij het scoreveld een waarde heeft van minder dan 30. De aggregatie telt het totale aantal records en voegt deze toe aan een nieuw kolom “GraadD.” De uitvoer toont het resultaat “2” als het telnummer voor de overeenkomende waarde.

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

U kunt ook de aggregatie $count gebruiken terwijl u de logische operatoren toepast om meer dan één voorwaarde op de veldrecords uit te voeren. Daarom zijn er in totaal twee voorwaarden toegepast op het veld “Score” met behulp van de operator $and: gte (groter dan of gelijk aan) en lte (kleiner dan en gelijk aan). Beide voorwaarden moeten waar zijn om het resultaat te krijgen en de records ervan te tellen. Uit het totaalaantal blijkt dat er vijf records zijn met de overeenkomende criteria.



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

{ $telling: 'Graad B' } ] )

Voorbeeld 03

In de bovenstaande illustraties hebben we de tellingsaggregatie gebruikt om alleen het aantal overeenkomende records voor de specifieke veldwaarden te verkrijgen, zoals een opgegeven score of naam. Met de aggregatiemethode van MongoDB kunt u het telnummer verkrijgen van alle records die dubbele waarden in de verzameling bevatten.

Hiervoor moet u de aggregatie $group gebruiken binnen het aggregatiefunctiecommando, zoals hieronder. Het veld _id is gebruikt om het veld “naam” op te geven waarop de tellingaggregatie zou werken. Daarnaast zal het door de gebruiker gedefinieerde veld NameCount de aggregatie $count gebruiken om verschillende duplicaten in het veld 'naam' te tellen.

De uitvoer voor deze query is hieronder weergegeven. Het bevat de waarden uit het veld 'naam' en hun telnummer in het veld NameCount op basis van duplicaties van waarden, zoals Cillian met 4 duplicaten, enzovoort.

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

Voorbeeld 04

We kunnen de tellingsaggregatie voor geneste veldrecords ook gebruiken om bepaalde veldwaarden te tellen. Om dit verder uit te werken, hebben we een verzameling gemaakt met de naam “Leraar” en daarin een genest veld “sub” en een array-type veld “shift” toegevoegd, samen met andere velden: naam en loon. De functie find() heeft alle vijf records van deze verzameling weergegeven.

test> db.Teacher.find({})

Nu hebben we de aggregatiefunctie toegepast die de match-operator bevat. Ook is de $and-operator toegepast op het subveld “wiskunde” van het “sub”-veld, dat twee verschillende voorwaarden bevat. Vervolgens is het aantal berekend. De uitvoer laat zien dat er twee records zijn waarin het subveld wiskunde groter dan 10 en minder dan 20 waarden heeft.

db.Teacher.aggregate( [ { $match: { '$en' : [ { 'sub.wiskunde' : {$gte: 10 }}, { 'sub.wiskunde' : {$lte: twintig }} ] }}, { $count: 'Klasse A' } ] )

Voorbeeld 05

Laten we naar het laatste voorbeeld kijken om te illustreren dat we deze keer de functie count() gebruiken in plaats van de aggregatie van het aantal. De functie count() is dus toegepast op het array-type veld van de “Teacher”-collectie, d.w.z. “shift”. Met behulp van de indexen voor het arrayveld met index 2 hebben we de overeenkomende criteria gespecificeerd als 'nacht'. Er wordt “2” weergegeven als het totale aantal tellingen voor de invoer “nacht”.

db.Teacher.count({ 'verschuiving.2' : 'nacht' })

Op een zeer vergelijkbare manier kan de functie count() ook worden toegepast op de geneste velden, zoals het subveld “phy” van het veld “sub” uit de collectie “Teacher”. We hebben de matchingcriteria gespecificeerd met behulp van de operator ‘lte’, die waarden kleiner dan 14 aangeeft in het subveld ‘phy’. De uitvoer van deze instructie geeft “2” weer, d.w.z. 4 records met een waarde kleiner dan 14.

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

Conclusie

In deze handleiding wordt het gebruik van de $count-aggregatie van MongoDB gedemonstreerd en uitgewerkt met verschillende codevoorbeelden. De voorbeelden omvatten de implicatie van tellingsaggregatie om het tellingsnummer op te halen voor specifieke waarderecords en alle veldrecords via de collecties. Het omvat ook het gebruik van tellingsaggregatie voor arrayvelden en ingebedde (geneste) velden. Uiteindelijk is het voorbeeld van de count()-functie opgenomen om een ​​verschil te maken tussen het gebruik van count-aggregatie en de count-functie.