MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

7 modi per contare i documenti in MongoDB

MongoDB offre vari metodi per contare i documenti in una raccolta o vista. Sono inoltre disponibili alcuni operatori di aggregazione che consentono di contare i documenti in arrivo da una precedente fase della pipeline di aggregazione.

Questo articolo presenta i seguenti modi per contare i documenti nella mongo shell:

  • Il count comando
  • Il db.collection.count() metodo
  • Il db.collection.countDocuments() metodo
  • Il db.collection.estimatedDocumentCount() metodo
  • Il cursor.count() metodo
  • Il $count operatore della pipeline di aggregazione
  • Il $sortByCount operatore della pipeline di aggregazione

Il count Comando

Il count comando conta il numero di documenti in una raccolta o in una vista.

Esempio:

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

Risultato:

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

In questo esempio, possiamo vedere che ci sono quattro cani in pets raccolta.

Possiamo anche vedere che restituisce un documento che contiene il conteggio e lo stato del comando.

Il db.collection.count() Metodo

Il db.collection.count() il metodo restituisce il conteggio dei documenti che corrisponderebbero a un find() query per la raccolta o la visualizzazione.

La collection part è il nome della raccolta o della vista su cui eseguire l'operazione di conteggio.

Il db.collection.count() method è un metodo wrapper per il count comando.

Esempio:

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

Risultato:

4

Il db.collection.count() il metodo non restituisce un documento come il count comando fa. Restituisce semplicemente il conteggio.

Il countDocuments() Metodo

Il db.collection.countDocuments() restituisce il conteggio dei documenti che corrispondono alla query per una raccolta o una vista.

La collection part è il nome della raccolta o della vista su cui eseguire l'operazione di conteggio.

Esempio:

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

Risultato:

4

Fondamentalmente lo stesso risultato di db.collection.count() , anche se si consiglia di utilizzare countDocuments() invece di count() se possibile.

La documentazione di MongoDB afferma:

I driver MongoDB compatibili con le funzionalità 4.0 deprecano il rispettivo cursore e la raccolta count() API a favore di nuove API per countDocuments() e estimatedDocumentCount() . Per i nomi API specifici per un determinato driver, consulta la documentazione del driver.

Inoltre, se utilizzato senza un predicato di query, count() si basa sui metadati, che possono comportare un conteggio approssimativo. Il countDocuments() metodo d'altra parte, non si basa sui metadati e restituisce un conteggio accurato eseguendo un'aggregazione dei documenti.

Il estimatedDocumentCount() Metodo

Il db.collection.estimatedDocumentCount() è un wrapper per il count comando che restituisce il conteggio di tutti i documenti in una raccolta o vista.

Esempio:

db.pets.estimatedDocumentCount()

Risultato:

7

Il db.collection.estimatedDocumentCount() il metodo non accetta un filtro di query. Utilizza invece i metadati per restituire il conteggio dei documenti per l'intera raccolta/vista.

Il cursor.count() Metodo

Il cursor.count() è un wrapper per il count comando che conta il numero di documenti referenziati da un cursore..

In realtà non esegue la query. Conta e restituisce semplicemente il numero di risultati che verrebbero restituiti dalla query.

Esempio:

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

Risultato:

4

Questo equivale a db.collection.count() esempio di metodo sopra.

Come citato sopra, i driver MongoDB compatibili con le funzionalità 4.0 deprecano il rispettivo cursore e raccolta count() API a favore di nuove API per countDocuments() e estimatedDocumentCount() .

Il $count Operatore di condotte di aggregazione

Il $count l'operatore di aggregazione passa un documento alla fase successiva della pipeline di aggregazione che contiene un conteggio del numero di documenti immessi nella fase corrente.

Esempio:

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

Risultato:

{ "DogCount" : 4 }

Ecco un altro esempio che mostra come puoi utilizzare questo operatore per contare i risultati raggruppati.

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

Risultato:

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

Questa particolare query può essere eseguita con meno codice utilizzando $sortByCount operatore della pipeline di aggregazione (sotto).

Il $sortByCount Operatore di condotte di aggregazione

Il $sortByCount l'operatore di aggregazione raggruppa i documenti in entrata in base al valore di un'espressione specificata, quindi calcola il conteggio dei documenti in ciascun gruppo distinto.

Ecco come possiamo usare $sortByCount per ottenere lo stesso risultato dell'esempio precedente:

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

Risultato:

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

Ogni gruppo viene emesso nel proprio documento, composto da due campi:

  • un _id campo contenente il valore di raggruppamento distinto e
  • un count campo contenente il numero di documenti appartenenti a quel raggruppamento.

I documenti sono ordinati per count in ordine decrescente.