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

2 cách để có được kích thước tài liệu trong MongoDB

Nếu bạn cần trả lại kích thước của tài liệu trong MongoDB, bạn có thể sử dụng như sau:

  • $bsonSize nhà điều hành đường ống tổng hợp
  • Object.bsonSize() phương pháp

Dưới đây là các ví dụ về từng cách tiếp cận.

Dữ liệu mẫu

Đối với các ví dụ sau, chúng tôi sẽ sử dụng một bộ sưu tập được gọi là products với các tài liệu sau:

{ "_id" : 1, "product" : { "name" : "Shirt - Short Sleeves", "color" : "White" } }
{ "_id" : 2, "product" : { "name" : "Cap", "color" : "Green" } }
{ "_id" : 3, "product" : { "name" : "Travel Pack", "color" : "Light Blue" } }

Lưu ý rằng mỗi trường sản phẩm chứa một tài liệu được nhúng.

Chúng tôi có thể trả về kích thước của toàn bộ tài liệu hoặc chỉ đối tượng được nhúng.

$bsonSize Nhà điều hành đường ống tổng hợp

Chúng ta có thể sử dụng $bsonSize toán tử với $$ROOT biến hệ thống để lấy kích thước của toàn bộ tài liệu. $$ROOT biến đề cập đến tài liệu hiện đang được xử lý bởi đường ống.

Ví dụ:

db.products.aggregate([
  {
    $project: {
      "rootSize": { $sum: { $bsonSize: "$$ROOT" } }
    }
  }
])

Kết quả:

{ "_id" : 1, "rootSize" : 81 }
{ "_id" : 2, "rootSize" : 63 }
{ "_id" : 3, "rootSize" : 76 }

Trong trường hợp này, chúng tôi nhận được kích thước của tất cả các tài liệu trong bộ sưu tập, nhưng bạn luôn có thể lọc nó thành chỉ một hoặc một số tài liệu.

Để có được kích thước của tài liệu được nhúng, chúng tôi có thể thay thế $$ROOT biến với tên trường của tài liệu.

Ví dụ:

db.products.aggregate([
  {
    $project: {
      "documentSize": { $sum: { $bsonSize: "$product" } }
    }
  }
])

Kết quả:

{ "_id" : 1, "documentSize" : 54 }
{ "_id" : 2, "documentSize" : 36 }
{ "_id" : 3, "documentSize" : 49 }

Trong trường hợp này, tên trường là product và vì vậy chúng tôi sử dụng $product để tham chiếu đến trường đó.

Xem MongoDB $bsonSize để biết thêm thông tin và ví dụ.

Object.bsonSize() Phương pháp

Object.bsonSize() là một cách khác để lấy kích thước của tài liệu.

Ví dụ:

Object.bsonsize(
    db.products.findOne()
)

Kết quả:

81

Phương thức này chỉ trả về kích thước và không còn nữa.

Lưu ý rằng tôi đã sử dụng findOne() thay vì find() phương pháp. Tôi đã làm điều này vì find() chỉ trả về một con trỏ, trong khi findOne() trả về tài liệu thực tế.

Chúng tôi có thể lấy kích thước của tài liệu nhúng bằng cách thêm nó bằng ký hiệu dấu chấm:

Object.bsonsize(
    db.products.findOne().product
)

Kết quả:

54

Chúng ta có thể lấy kích thước của tài liệu tiếp theo bằng cách chỉ định _id của nó làm đối số truy vấn:

Object.bsonsize(
    db.products.findOne({_id:2}).product
)

Kết quả:

36

Xem MongoDB Object.bsonSize() để biết thêm thông tin và ví dụ.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách tạo tệp cấu hình cho MongoDB

  2. Sắp xếp theo trường ảo trong mongoDB (mongoose)

  3. Truy cập cơ sở dữ liệu sản xuất Meteor

  4. node.js mongodb chọn tài liệu theo _id node-mongodb-native

  5. MongoDB $ push so với $ addToSet:Sự khác biệt là gì?