Trong MongoDB, $count
toán tử tổng hợp chuyển tài liệu sang giai đoạn tiếp theo trong quy trình tổng hợp có chứa số lượng tài liệu được nhập vào giai đoạn hiện tại.
Ví dụ
Giả sử chúng ta có một bộ sưu tập có tên là pets
với các tài liệu sau:
{ "_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 }
Chúng ta có thể sử dụng phép toán tổng hợp sau để đếm số lượng chó trong bộ sưu tập:
db.pets.aggregate([
{
$match: { type: "Dog" }
},
{
$count: "DogCount"
}
])
Kết quả:
{ "DogCount" : 4 }
Cách thức hoạt động của đường ống tổng hợp là nó bao gồm các giai đoạn. Mỗi giai đoạn đường ống cung cấp đầu vào cho giai đoạn tiếp theo.
Do đó, trong ví dụ trên, giai đoạn đầu tiên lọc bộ sưu tập xuống chỉ những tài liệu có type
của dog
. Giai đoạn thứ hai lấy các tài liệu đó, đếm và chuyển kết quả cho giai đoạn tiếp theo. Vì đây là giai đoạn cuối cùng trong quy trình, chúng tôi đã thấy kết quả đầu ra.
Đếm tài liệu được nhóm
Dưới đây là một ví dụ kết hợp toán tử tổng hợp $ group với $ count để trả về số lượng từng loại vật nuôi dưới một trọng lượng nhất định.
db.pets.aggregate([
{
$match: { weight: { $lt: 30 } }
},
{
$group: { _id: "$type", count: { $sum: 1 } }
}
])
Kết quả:
{ "_id" : "Cat", "count" : 2 }
{ "_id" : "Bat", "count" : 1 }
{ "_id" : "Dog", "count" : 3 }
Thêm giai đoạn đường ống
Trong ví dụ này, chúng tôi thêm một giai đoạn đường ống để sắp xếp kết quả. Đặc biệt, chúng tôi sử dụng $sort
để thực hiện việc này.
db.pets.aggregate([
{
$match: { weight: { $lt: 30 } }
},
{
$group: { _id: "$type", count: { $sum: 1 } }
},
{
$sort : { count : -1, _id: 1 }
}
])
Kết quả:
{ "_id" : "Dog", "count" : 3 }
{ "_id" : "Cat", "count" : 2 }
{ "_id" : "Bat", "count" : 1 }
Trong trường hợp này, chúng tôi sắp xếp theo số lượng theo thứ tự giảm dần (-1
chỉ định thứ tự giảm dần), sau đó bằng _id
theo thứ tự tăng dần (1
chỉ định thứ tự tăng dần).
Thông tin thêm
Xem tài liệu MongoDB để biết thêm thông tin.