sql >> Database >  >> NoSQL >> MongoDB

7 manieren om documenten te tellen in MongoDB

MongoDB biedt verschillende methoden om de documenten in een verzameling of weergave te tellen. Er zijn ook enkele aggregatie-operators waarmee u inkomende documenten van een eerdere aggregatiepijplijnfase kunt tellen.

Dit artikel presenteert de volgende manieren om documenten in de mongo-shell te tellen:

  • De count commando
  • De db.collection.count() methode
  • De db.collection.countDocuments() methode
  • De db.collection.estimatedDocumentCount() methode
  • De cursor.count() methode
  • De $count aggregatie pijpleiding operator
  • De $sortByCount aggregatie pijpleiding operator

De count Commando

De count commando telt het aantal documenten in een verzameling of een weergave.

Voorbeeld:

db.runCommand( { 
    count: "pets", 
    query: { type: "Dog" } 
} )

Resultaat:

{ "n" : 4, "ok" : 1 }

In dit voorbeeld kunnen we zien dat er vier honden zijn in de pets collectie.

We kunnen ook zien dat het een document retourneert dat zowel de telling als de opdrachtstatus bevat.

De db.collection.count() Methode

De db.collection.count() methode retourneert het aantal documenten dat zou overeenkomen met een find() vraag voor de verzameling of weergave.

De collection deel is de naam van de verzameling of weergave waarop de telbewerking moet worden uitgevoerd.

De db.collection.count() methode is een wrapper-methode voor de count commando.

Voorbeeld:

db.pets.count({
    "type": "Dog"
})

Resultaat:

4

De db.collection.count() methode retourneert geen document zoals de count opdracht doet. Het geeft gewoon de telling terug.

De countDocuments() Methode

De db.collection.countDocuments() methode retourneert het aantal documenten dat overeenkomt met de zoekopdracht voor een verzameling of weergave.

De collection deel is de naam van de verzameling of weergave waarop de telbewerking moet worden uitgevoerd.

Voorbeeld:

db.pets.countDocuments({
    "type": "Dog"
})

Resultaat:

4

In principe hetzelfde resultaat als db.collection.count() , hoewel het wordt aanbevolen om countDocuments() . te gebruiken in plaats van count() indien mogelijk.

In de MongoDB-documentatie staat:

MongoDB-stuurprogramma's die compatibel zijn met de 4.0-functies depreciëren hun respectieve cursor en verzameling count() API's in het voordeel van nieuwe API's voor countDocuments() en estimatedDocumentCount() . Zie de driverdocumentatie voor de specifieke API-namen voor een bepaalde driver.

Ook, wanneer gebruikt zonder een query-predikaat, count() is afhankelijk van metadata, wat kan resulteren in een geschatte telling. De countDocuments() methode daarentegen is niet afhankelijk van metadata en geeft een nauwkeurige telling terug door een aggregatie van de documenten uit te voeren.

De estimatedDocumentCount() Methode

De db.collection.estimatedDocumentCount() methode is een wrapper voor de count commando dat de telling van alle documenten in een verzameling of weergave retourneert.

Voorbeeld:

db.pets.estimatedDocumentCount()

Resultaat:

7

De db.collection.estimatedDocumentCount() methode heeft geen queryfilter nodig. In plaats daarvan gebruikt het metadata om het aantal documenten voor de hele verzameling/weergave te retourneren.

De cursor.count() Methode

De cursor.count() methode is een wrapper voor de count commando dat het aantal documenten telt waarnaar door een cursor wordt verwezen..

Het voert de query niet echt uit. Het telt gewoon en geeft het aantal resultaten terug dat door de zoekopdracht zou worden geretourneerd.

Voorbeeld:

db.pets.find({"type": "Dog"}).count()

Resultaat:

4

Dit is gelijk aan de db.collection.count() methodevoorbeeld hierboven.

Zoals hierboven geciteerd, depreciëren MongoDB-stuurprogramma's die compatibel zijn met de 4.0-functies hun respectieve cursor en verzameling count() API's in het voordeel van nieuwe API's voor countDocuments() en estimatedDocumentCount() .

De $count Aggregatiepijplijnoperator

De $count aggregatie-operator geeft een document door aan de volgende fase in de aggregatiepijplijn die een telling bevat van het aantal documenten dat in de huidige fase is ingevoerd.

Voorbeeld:

db.pets.aggregate([
    {
      $match: { type: "Dog" }
    },
    {
      $count: "DogCount"
    }
])

Resultaat:

{ "DogCount" : 4 }

Hier is nog een voorbeeld dat laat zien hoe u deze operator kunt gebruiken om gegroepeerde resultaten te tellen.

db.pets.aggregate([
    {
      $match: { weight: { $lt: 30 } }
    },
    {
      $group: { _id: "$type", count: { $sum: 1 } }
    },
     { 
      $sort : { count : -1, _id: 1 } 
    }
])

Resultaat:

{ "_id" : "Dog", "count" : 3 }
{ "_id" : "Cat", "count" : 2 }
{ "_id" : "Bat", "count" : 1 }

Deze specifieke zoekopdracht kan worden gedaan met minder code door gebruik te maken van de $sortByCount aggregatie pijpleiding operator (hieronder).

De $sortByCount Aggregatiepijplijnoperator

De $sortByCount aggregatie-operator groepeert binnenkomende documenten op basis van de waarde van een opgegeven uitdrukking en berekent vervolgens het aantal documenten in elke afzonderlijke groep.

Hier is hoe we $sortByCount kunnen gebruiken om hetzelfde resultaat te bereiken als in het vorige voorbeeld:

db.pets.aggregate([
    {
      $match: { weight: { $lt: 30 } }
    },
    {
      $sortByCount: "$type"
    }
])

Resultaat:

{ "_id" : "Dog", "count" : 3 }
{ "_id" : "Cat", "count" : 2 }
{ "_id" : "Bat", "count" : 1 }

Elke groep wordt uitgevoerd in zijn eigen document, dat uit twee velden bestaat:

  • een _id veld met de onderscheidende groeperingswaarde, en
  • een count veld met het aantal documenten dat tot die groepering behoort.

De documenten zijn gesorteerd op count in aflopende volgorde.


  1. MongoDB, prestatie van query door reguliere expressie op geïndexeerde velden

  2. Wat is het nut van Jade of Handlebars bij het schrijven van AngularJs-apps?

  3. Aan de slag met databaseautomatisering

  4. Mongoose Unieke waarden in geneste reeks objecten