Quelle est la différence entre, je voulais fondamentalement trouver tous les documents dans le mycollection .db.mycollection.count()
vs db.mycollection.find().count()
?
Ils retournent tous les deux le même résultat. Y a-t-il une raison pour laquelle quelqu'un choisirait la count()
contre la find().count()
? Contrairement au fait que find()
applique une limite par défaut (corrigez-moi si je me trompe) pour lequel vous devez taper "it" afin d'en voir plus dans le shell.
db.collection.count()
et cursor.count()
sont simplement des wrappers autour de la commande count
, si bien que lancer db.collection.count()
et cursor.count()
avec/sans le même, renverra le même argument query, renverra le même résultat. Cependant, le résultat count
peut être inexact dans un cluster partagé .
Les pilotes MongoDB compatibles avec les fonctionnalités 4.0 rendent obsolètes leurs API de curseur et de collection respectives () en faveur de nouvelles API pour countDocuments () et estimationDocumentCount (). Pour l'API spécifique les noms d’un pilote donné, voir la documentation du pilote.
La méthode db.collection.countDocuments
utilise en interne une requête d'agrégation pour renvoyer le nombre de documents alors que db.collection.estimatedDocumentCount/
renvoie le nombre de documents basé sur des métadonnées.
Il est à noter que la sortie estimatedDocumentCount
peut être inexacte, comme indiqué dans la documentation .
Comme mentionné dans une autre réponse de Sheilak, les deux sont équivalents - à l'exception que db.collection.count()
peut être inexact pour des grappes à éclat.
La dernière documentation dit:
count () est équivalent à db.collection.find (query) .count () construction.
Et alors,
Clusters fragmentés
Sur un cluster partagé, db.collection.count () peut générer un nombre inexact s'il existe des documents orphelins ou s'il s'agit d'une migration de bloc est en cours.
La documentation explique comment atténuer ce bug (utiliser un agrégat).
db.collection.count () est équivalent à la construction db.collection.find (query) .count ().
Exemples
Compter tous les documents d'une collection
db.orders.count()
Cette opération est équivalente à celle-ci:
db.orders.find().count()
Compter tous les documents correspondant à une requête
Comptez le nombre de documents dans la collection de commandes avec le champ ord_dt supérieur à la nouvelle date ('01/01/2012 '):
db.orders.count( { ord_dt: { $gt: new Date('01/01/2012') } } )
La requête est équivalente à la suivante:
db.orders.find( { ord_dt: { $gt: new Date('01/01/2012') } } ).count()
Selon la documentation du scénario suivant, db.collection.count () peut être inexact:
Je crois que si vous utilisez une sorte de pagination comme:
find(query).limit().skip().count()
Vous n'obtiendrez pas le même résultat que
count(query)
Donc, dans de tels cas, si vous voulez obtenir le total, je pense que vous devrez peut-être utiliser les deux.