В MongoDB $count
Операторът за агрегиране предава документ към следващия етап в конвейера за агрегиране, който съдържа броя на въведените документи в текущия етап.
Пример
Да предположим, че имаме колекция, наречена pets
със следните документи:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 } { "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 } { "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 } { "_id" : 6, "name" : "Fetch", "type" : "Dog", "weight" : 17 } { "_id" : 7, "name" : "Jake", "type" : "Dog", "weight" : 30 }
Можем да използваме следната операция за агрегиране, за да преброим броя на кучетата в колекцията:
db.pets.aggregate([
{
$match: { type: "Dog" }
},
{
$count: "DogCount"
}
])
Резултат:
{ "DogCount" : 4 }
Начинът, по който работи тръбопроводът за агрегиране е, че се състои от етапи. Всеки етап на тръбопровода предоставя вход за следващия етап.
Следователно, в горния пример, първият етап филтрира колекцията до само онези документи, които имат type
на dog
. Вторият етап взе тези документи, преброи ги и предаде резултата на следващия етап. Като се има предвид, че това беше последният етап в тръбопровода, видяхме изхода.
Преброяване на групирани документи
Ето пример, който комбинира оператора за обобщение $group с $count, за да върне броя на всеки тип домашен любимец под определено тегло.
db.pets.aggregate([
{
$match: { weight: { $lt: 30 } }
},
{
$group: { _id: "$type", count: { $sum: 1 } }
}
])
Резултат:
{ "_id" : "Cat", "count" : 2 }
{ "_id" : "Bat", "count" : 1 }
{ "_id" : "Dog", "count" : 3 }
Добавяне на етап на конвейер
В този пример добавяме етап на конвейер, за да сортираме резултатите. По-специално, ние използваме $sort
оператор, за да направи това.
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 }
В този случай ние сортирахме по броя в низходящ ред (-1
определя низходящ ред), след това от _id
във възходящ ред (1
определя възходящ ред).
Повече информация
Вижте документацията на MongoDB за повече информация.