MongoDB cung cấp nhiều phương pháp khác nhau để đếm tài liệu trong một bộ sưu tập hoặc chế độ xem. Cũng có một số toán tử tổng hợp cho phép bạn đếm các tài liệu đến từ giai đoạn đường ống tổng hợp trước đó.
Bài viết này trình bày các cách sau để đếm tài liệu trong mongo shell:
- Số lượng
count
lệnh -
db.collection.count()
phương pháp -
db.collection.countDocuments()
phương pháp -
db.collection.estimatedDocumentCount()
phương pháp -
cursor.count()
phương pháp -
$count
nhà điều hành đường ống tổng hợp -
$sortByCount
nhà điều hành đường ống tổng hợp
Số lượng count
Lệnh
Số lượng count
lệnh đếm số lượng tài liệu trong một bộ sưu tập hoặc một dạng xem.
Ví dụ:
db.runCommand( {
count: "pets",
query: { type: "Dog" }
} )
Kết quả:
{"n":4, "ok":1}
Trong ví dụ này, chúng ta có thể thấy rằng có bốn con chó trong pets
bộ sưu tập.
Chúng ta cũng có thể thấy rằng nó trả về một tài liệu có chứa số lượng cũng như trạng thái lệnh.
db.collection.count()
Phương pháp
db.collection.count()
phương thức trả về số lượng tài liệu phù hợp với find()
truy vấn bộ sưu tập hoặc chế độ xem.
Bộ sưu tập count
một phần là tên của bộ sưu tập hoặc chế độ xem để thực hiện thao tác đếm.
db.collection.count()
phương thức là một phương thức trình bao bọc cho count
lệnh.
Ví dụ:
db.pets.count({
"type": "Dog"
})
Kết quả:
4
db.collection.count()
phương thức không trả về một tài liệu như count
lệnh nào. Nó chỉ trả về số lượng.
countDocuments()
Phương pháp
db.collection.countDocuments()
phương thức trả về số lượng tài liệu phù hợp với truy vấn cho một bộ sưu tập hoặc chế độ xem.
Bộ sưu tập count
một phần là tên của bộ sưu tập hoặc chế độ xem để thực hiện thao tác đếm.
Ví dụ:
db.pets.countDocuments({
"type": "Dog"
})
Kết quả:
4
Về cơ bản, kết quả giống như db.collection.count()
, mặc dù bạn nên sử dụng countDocuments()
thay vì count()
nếu có thể.
Tài liệu MongoDB cho biết:
Trình điều khiển MongoDB tương thích với các tính năng 4.0 không dùng con trỏ và bộ sưu tập tương ứng
count()
Các API ủng hộ các API mới chocountDocuments()
vàestimatedDocumentCount()
. Để biết các tên API cụ thể cho một trình điều khiển nhất định, hãy xem tài liệu về trình điều khiển.
Ngoài ra, khi được sử dụng mà không có vị từ truy vấn, count()
dựa vào siêu dữ liệu, điều này có thể dẫn đến số lượng gần đúng. countDocuments()
mặt khác, không dựa vào siêu dữ liệu và trả về số lượng chính xác bằng cách thực hiện tổng hợp các tài liệu.
estimatedDocumentCount()
Phương pháp
db.collection.estimatedDocumentCount()
phương thức là một trình bao bọc cho count
lệnh trả về số lượng tất cả các tài liệu trong một bộ sưu tập hoặc chế độ xem.
Ví dụ:
db.pets.estimatedDocumentCount()
Kết quả:
7
db.collection.estimatedDocumentCount()
phương pháp không sử dụng bộ lọc truy vấn. Thay vào đó, nó sử dụng siêu dữ liệu để trả về số lượng tài liệu cho toàn bộ bộ sưu tập / chế độ xem.
cursor.count()
Phương pháp
cursor.count()
phương thức là một trình bao bọc cho count
lệnh đếm số lượng tài liệu được tham chiếu bởi con trỏ ..
Nó không thực sự thực hiện truy vấn. Nó chỉ đơn giản là đếm và trả về số lượng kết quả sẽ được trả về bởi truy vấn.
Ví dụ:
db.pets.find({"type": "Dog"}).count()
Kết quả:
4
Điều này tương đương với db.collection.count()
ví dụ phương pháp ở trên.
Như đã trích dẫn ở trên, các trình điều khiển MongoDB tương thích với các tính năng 4.0 không dùng con trỏ và bộ sưu tập tương ứng count()
Các API ủng hộ các API mới cho countDocuments()
và estimatedDocumentCount()
.
$count
Nhà điều hành đường ống tổng hợp
$count
toán tử tổng hợp chuyển một 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ụ:
db.pets.aggregate([
{
$match: { type: "Dog" }
},
{
$count: "DogCount"
}
])
Kết quả:
{"DogCount":4}
Dưới đây là một ví dụ khác cho thấy cách bạn có thể sử dụng toán tử này để đếm các kết quả được nhóm.
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 }
Truy vấn cụ thể này có thể được thực hiện với ít mã hơn bằng cách sử dụng $sortByCount
nhà điều hành đường ống tổng hợp (bên dưới).
$sortByCount
Nhà điều hành đường ống tổng hợp
$sortByCount
toán tử tổng hợp nhóm các tài liệu đến dựa trên giá trị của một biểu thức được chỉ định, sau đó tính toán số lượng tài liệu trong mỗi nhóm riêng biệt.
Đây là cách chúng tôi có thể sử dụng $sortByCount
để đạt được kết quả tương tự như ví dụ trước:
db.pets.aggregate([
{
$match: { weight: { $lt: 30 } }
},
{
$sortByCount: "$type"
}
])
Kết quả:
{"_id":"Dog", "count":3} {"_id":"Cat", "count":2} {"_id":"Bat", "count":1}Mỗi nhóm được xuất trong tài liệu riêng của nó, bao gồm hai trường:
- một
_id
trường chứa giá trị nhóm riêng biệt và - một
count
trường chứa số lượng tài liệu thuộc nhóm đó.
Các tài liệu được sắp xếp theo count
theo thứ tự giảm dần.