MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

7 sposobów liczenia dokumentów w MongoDB

MongoDB oferuje różne metody liczenia dokumentów w kolekcji lub widoku. Istnieje również kilka operatorów agregacji, które umożliwiają zliczanie dokumentów przychodzących z poprzedniego etapu potoku agregacji.

W tym artykule przedstawiono następujące sposoby liczenia dokumentów w powłoce mongo:

  • count polecenie
  • db.collection.count() metoda
  • db.collection.countDocuments() metoda
  • db.collection.estimatedDocumentCount() metoda
  • cursor.count() metoda
  • $count operator potoku agregacji
  • $sortByCount operator potoku agregacji

count Polecenie

count polecenie zlicza liczbę dokumentów w kolekcji lub widoku.

Przykład:

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

Wynik:

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

W tym przykładzie widzimy, że w grupie pets znajdują się cztery psy kolekcja.

Widzimy również, że zwraca dokument, który zawiera liczbę oraz status polecenia.

db.collection.count() Metoda

db.collection.count() metoda zwraca liczbę dokumentów, które pasują do find() zapytanie dotyczące kolekcji lub widoku.

collection część to nazwa kolekcji lub widoku do wykonania operacji liczenia.

db.collection.count() method jest opakowującą metodą dla count polecenie.

Przykład:

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

Wynik:

4

db.collection.count() metoda nie zwraca dokumentu takiego jak count robi polecenie. Po prostu zwraca liczbę.

countDocuments() Metoda

db.collection.countDocuments() metoda zwraca liczbę dokumentów pasujących do zapytania dla kolekcji lub widoku.

collection część to nazwa kolekcji lub widoku do wykonania operacji liczenia.

Przykład:

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

Wynik:

4

Zasadniczo ten sam wynik, co db.collection.count() , chociaż zaleca się użycie countDocuments() zamiast count() jeśli to możliwe.

Dokumentacja MongoDB stwierdza:

Sterowniki MongoDB kompatybilne z funkcjami 4.0 wypierają ich odpowiedni kursor i kolekcję count() API na korzyść nowych API dla countDocuments() i estimatedDocumentCount() . Aby uzyskać szczegółowe nazwy API dla danego sterownika, zapoznaj się z dokumentacją sterownika.

Ponadto, gdy jest używany bez predykatu zapytania, count() opiera się na metadanych, co może skutkować przybliżoną liczbą. countDocuments() z drugiej strony metoda nie opiera się na metadanych i zwraca dokładną liczbę, wykonując agregację dokumentów.

estimatedDocumentCount() Metoda

db.collection.estimatedDocumentCount() metoda jest opakowaniem dla count polecenie, które zwraca liczbę wszystkich dokumentów w kolekcji lub widoku.

Przykład:

db.pets.estimatedDocumentCount()

Wynik:

7

db.collection.estimatedDocumentCount() metoda nie przyjmuje filtra zapytań. Zamiast tego używa metadanych do zwrócenia liczby dokumentów dla całej kolekcji/widoku.

cursor.count() Metoda

cursor.count() metoda jest opakowaniem dla count polecenie, które zlicza liczbę dokumentów, do których odwołuje się kursor.

W rzeczywistości nie wykonuje zapytania. Po prostu zlicza i zwraca liczbę wyników, które zostałyby zwrócone przez zapytanie.

Przykład:

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

Wynik:

4

Jest to odpowiednik db.collection.count() przykład metody powyżej.

Jak zacytowałem powyżej, sterowniki MongoDB kompatybilne z funkcjami 4.0 przestarzały odpowiedni kursor i kolekcję count() API na korzyść nowych API dla countDocuments() i estimatedDocumentCount() .

$count Operator potoku agregacji

$count Operator agregacji przekazuje dokument do następnego etapu w potoku agregacji, który zawiera liczbę dokumentów wprowadzonych do bieżącego etapu.

Przykład:

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

Wynik:

{ "DogCount" : 4 }

Oto kolejny przykład, który pokazuje, jak używać tego operatora do liczenia zgrupowanych wyników.

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

Wynik:

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

To konkretne zapytanie można wykonać z mniejszą ilością kodu, używając $sortByCount operator potoku agregacji (poniżej).

$sortByCount Operator potoku agregacji

$sortByCount operator agregacji grupuje przychodzące dokumenty na podstawie wartości określonego wyrażenia, a następnie oblicza liczbę dokumentów w każdej odrębnej grupie.

Oto jak możemy użyć $sortByCount aby osiągnąć ten sam wynik, co w poprzednim przykładzie:

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

Wynik:

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

Każda grupa jest wyprowadzana we własnym dokumencie, który składa się z dwóch pól:

  • _id pole zawierające odrębną wartość grupowania i
  • count pole zawierające liczbę dokumentów należących do tej grupy.

Dokumenty są sortowane według count w porządku malejącym.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak zaktualizować wiele elementów tablicy w mongodb

  2. Uwierzytelnianie aplikacji NodeJS i MongoDB przez JWT

  3. wepchnij nową wartość do wewnętrznej tablicy mongodb - mongodb/php

  4. mongodb, replikuje się i błąd:{ $err :not master and slaveOk=false, kod :13435 }

  5. rmongodb:używając $ lub w zapytaniu