MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

7 cách đếm tài liệu trong MongoDB

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 cho countDocuments()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()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.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nhà điều hành đường ống tổng hợp MongoDB $ lte

  2. Cách sắp xếp mongodb với pymongo

  3. Nhiều điều kiện tham gia bằng cách sử dụng toán tử $ lookup

  4. MongoDB $ hoặc truy vấn

  5. Không thể kết nối với máy chủ 127.0.0.1:27017