MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

7 начина за броене на документи в MongoDB

MongoDB предлага различни методи за преброяване на документите в колекция или изглед. Има също така някои оператори за агрегиране, които ви позволяват да броите входящи документи от предишен етап на тръбопровода за агрегиране.

Тази статия представя следните начини за броене на документи в mongo shell:

  • count команда
  • db.collection.count() метод
  • db.collection.countDocuments() метод
  • db.collection.estimatedDocumentCount() метод
  • cursor.count() метод
  • $count оператор на тръбопровод за агрегация
  • $sortByCount оператор на тръбопровод за агрегация

count Команда

count командата отчита броя на документите в колекция или изглед.

Пример:

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

Резултат:

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

В този пример можем да видим, че има четири кучета в pets колекция.

Можем също да видим, че връща документ, който съдържа броя, както и състоянието на командата.

db.collection.count() Метод

db.collection.count() методът връща броя на документите, които биха съвпадали с find() заявка за колекцията или изгледа.

collection част е името на колекцията или изгледа за извършване на операцията за броене.

db.collection.count() method е обвиващ метод за count команда.

Пример:

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

Резултат:

4

db.collection.count() методът не връща документ като count команда прави. Той просто връща броя.

countDocuments() Метод

db.collection.countDocuments() метод връща броя на документите, които съответстват на заявката за колекция или изглед.

collection част е името на колекцията или изгледа за извършване на операцията за броене.

Пример:

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

Резултат:

4

По принцип същият резултат като db.collection.count() , въпреки че се препоръчва използването на countDocuments() вместо count() ако е възможно.

Документацията на MongoDB гласи:

Драйверите на MongoDB, съвместими с функциите 4.0, отменят съответния курсор и колекция count() API в полза на нови API за countDocuments() и estimatedDocumentCount() . За конкретните имена на API за даден драйвер вижте документацията на драйвера.

Също така, когато се използва без предикат на заявка, count() разчита на метаданни, което може да доведе до приблизителен брой. countDocuments() от друга страна, не разчита на метаданни и връща точен брой, като извършва агрегиране на документите.

estimatedDocumentCount() Метод

db.collection.estimatedDocumentCount() method е обвивка за count команда, която връща броя на всички документи в колекция или изглед.

Пример:

db.pets.estimatedDocumentCount() 

Резултат:

7

db.collection.estimatedDocumentCount() методът не приема филтър за заявки. Вместо това използва метаданни, за да върне броя на документите за цялата колекция/изглед.

cursor.count() Метод

cursor.count() method е обвивка за count команда, която отчита броя на документите, на които се отнася курсорът..

Всъщност не изпълнява заявката. Той просто отчита и връща броя на резултатите, които ще бъдат върнати от заявката.

Пример:

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

Резултат:

4

Това е еквивалентно на db.collection.count() пример за метод по-горе.

Както беше цитирано по-горе, драйверите на MongoDB, съвместими с функциите 4.0, отхвърлят съответния курсор и колекция count() API в полза на нови API за countDocuments() и estimatedDocumentCount() .

$count Оператор на тръбопровод за агрегация

$count Операторът за агрегиране предава документ към следващия етап в конвейера за агрегиране, който съдържа броя на въведените документи в текущия етап.

Пример:

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

Резултат:

{ "DogCount" :4 }

Ето още един пример, който показва как можете да използвате този оператор за броене на групирани резултати.

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

Резултат:

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

Тази конкретна заявка може да се направи с по-малко код, като се използва $sortByCount оператор на тръбопровод за агрегиране (по-долу).

$sortByCount Оператор на тръбопровод за агрегация

$sortByCount Операторът за агрегиране групира входящи документи въз основа на стойността на определен израз, след което изчислява броя на документите във всяка отделна група.

Ето как можем да използваме $sortByCount за да постигнете същия резултат като предишния пример:

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

Резултат:

{ "_id" :"Куче", "count" :3 }{ "_id" :"Котка", "count" :2 }{ "_id" :"Прилеп", "count" :1 } 

Всяка група се извежда в собствен документ, който се състои от две полета:

  • _id поле, съдържащо отделната стойност за групиране, и
  • count поле, съдържащо броя на документите, принадлежащи към тази група.

Документите са сортирани по count в низходящ ред.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Получаване на отделно агрегиране на поле на масив между индекси

  2. MongoDb заявка за сума

  3. MongoDB deleteMany()

  4. SQL LPAD()

  5. Как да инсталирате MongoDB на Windows система?