Hur man räknar dokument med MongoDB Aggregate Count

Hur Man Raknar Dokument Med Mongodb Aggregate Count



Som namnet antyder måste $count-aggregationen i MongoDB användas för att räkna fältposter. Ett av de populära sätten att räkna poster är att använda metoden count(). Dessutom låter vissa aggregeringsoperatorer dig räkna poster som tagits in från ett tidigare skede av den aggregerade pipelinen. I den här guiden idag kommer vi att diskutera räkningsaggregationen av MongoDB med hjälp av kodexempel.

Exempel 01

För att utföra $count-operationen på fälten i en databassamling i MongoDB behöver vi ha många poster. Därför skapade vi en samling med namnet 'Test' och infogade 12 poster i den samtidigt med hjälp av insertMany()-funktionen. Nu har posterna för denna 'Test'-samling visats på MongoDB-skalet via funktionen find()-frågan. Du kan se att den har totalt tre fält:_id, namn och poäng.

test> db.Test.find({})







Nu, för att tillämpa $count-steget på vilket fält som helst, måste vi använda MongoDB:s aggregerade funktion inom 'db'-instruktionen. Den aggregerade funktionen består av villkorssatsen, ofta med operatorn $match på ett specifikt fält, följt av ett nytt fält som visar det totala antalet erhållet från det angivna villkorsfältet med operatorn $count.



I vårt fall har vi använt $match-operatorn för att söka efter matchande poster för värdet '60' i poängfältet, medan $count-operatorn har använts för att räkna det totala antalet hämtade poster och visa dem under nytt fält med namnet 'SameScore'. Utdata för denna fråga har visat ett fält 'SameScore' med värdet '2' som indikerar att det finns två poster med 'poäng'-värdet '60' är 2 i samlingen 'Test'.



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

Du kan också använda $count-aggregationen för att räkna andra fält än siffror, till exempel 'namn'-fältet i testsamlingen. Vi har använt matchningsaggregation för att söka efter posten i samlingen där namnfältet har värdet 'John'. Räkneaggregatet har framgångsrikt räknat det totala antalet matchade poster, vilket är 2.





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

Exempel 02

Låt oss uppdatera ovanstående fråga och tillämpa ett annat villkor för att få olika poster. Den här gången kommer vi att tillämpa $match-aggregationen för poängfältet för att få det totala antalet poster där poängfältet har ett värde på mindre än 30. Räkneaggregatet kommer att räkna det totala antalet poster och läggas till en ny kolumn 'Betyg D.' Utgången visar resultatet '2' som räknetal för det matchade värdet.

db.Test.aggregate( [ { $match: { poäng: { $lt: 30 } } }, { $count: 'Betygsatt' } ])

Du kan också använda $count-aggregationen samtidigt som du använder de logiska operatorerna för att utföra mer än ett villkor på fältposterna. Därför har totalt två villkor tillämpats på 'Poäng'-fältet med $and-operatorn: gte (större än eller lika med) och lte (mindre än och lika med). Båda villkoren måste vara sanna för att få resultatet och räkna dess rekord. Det totala antalet visar att det finns fem poster med matchningskriterierna.



db.Test.aggregate( [ { $match: { '$och' : [ { 'Göra' : {$gte: 60 }}, { 'Göra' : {$lte: 80 }} ] }},

{ $count: 'Betyg B' } ])

Exempel 03

I ovanstående illustrationer har vi använt räkningsaggregationen för att bara få antalet matchade poster för de specifika fältvärdena, såsom en specificerad poäng eller namn. Aggregeringsmetoden för MongoDB låter dig få räkningsnumret för alla poster som innehåller dubbla värden i samlingen.

För detta måste du använda $group-aggregationen inom kommandot aggregate-funktion, enligt nedan. Fältet _id har använts för att ange 'namn'-fältet som räkningsaggregationen skulle fungera på. Tillsammans med detta kommer det användardefinierade fältet NameCount att använda $count-aggregationen för att räkna flera dubbletter i 'namn'-fältet.

Utdata för denna fråga har visats nedan. Den innehåller värdena från fältet 'namn' och deras antal i fältet NameCount enligt dubbletter av värden, som att Cillian har 4 dubbletter och så vidare.

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

Exempel 04

Vi kan också använda räkningsaggregationen på kapslade fältposter för att räkna särskilda fältvärden. För att utveckla detta har vi skapat en samling som heter 'Lärare' och lagt till kapslade fält 'sub' och array-typ fält 'shift' i den tillsammans med andra fält: namn och lön. Find()-funktionen har visat alla fem poster i denna samling.

test> db.Teacher.find({})

Nu har vi tillämpat den aggregerade funktionen som innehåller matchningsoperatorn. Operatören $and har också tillämpats på underfältet 'math' i 'sub'-fältet, som innehåller två olika villkor. Antalet har sedan beräknats. Utdata visar att det finns två poster där underfältets matematik har större än 10 och mindre än 20 värden.

db.Teacher.aggregate( [ { $match: { '$och' : [ { 'sub.math' : {$gte: 10 }}, { 'sub.math' : {$lte: tjugo }} ] }}, { $count: 'Betyg A' } ])

Exempel 05

Låt oss titta på det sista exemplet för att illustrera användningen av funktionen count() den här gången istället för att använda count-aggregation. Så, funktionen count() har tillämpats på fältet array-typ i samlingen 'Lärare', dvs. 'skift'. Genom att använda indexen för arrayfältet med index 2 har vi specificerat matchningskriterierna som 'natt'. Den matar ut '2' som det totala antalet räkningar för posten 'natt'.

db.Teacher.count({ 'skift.2' : 'natt' })

På ett mycket liknande sätt kan funktionen count() också tillämpas på de kapslade fälten, till exempel underfältet 'phy' i 'sub'-fältet från samlingen 'Teacher'. Vi har specificerat matchningskriterierna med hjälp av operatorn 'lte' som anger värden mindre än 14 i underfältet 'phy'. Utdata från denna instruktion har visat '2', dvs. 4 poster med ett värde mindre än 14.

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

Slutsats

Den här guiden har demonstrerat och utvecklat hur man använder $count-aggregation av MongoDB med flera kodexempel. Exemplen inkluderar implikationen av räkningsaggregation för att hämta räknetalet för specifika värdeposter och alla fältposter genom samlingarna. Det inkluderar också användningen av räkningsaggregation på arrayfält och inbäddade (kapslade) fält. Till slut har funktionen count() inkluderats för att göra skillnad mellan användningen av count-aggregation och count-funktionen.