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
в низходящ ред.