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ụ.