Kiểm tra kích thước BSON document với Object.bsonsize()
Hàm Object.bsonsize(document) trong mongo shell trả về kích thước byte của document khi lưu trữ (BSON encoding).
1. Dữ liệu mẫu
> db.demo477.insertOne({ ClientId: 1, ClientName: "Chris" });
> db.demo477.insertOne({ ClientId: 2, ClientName: "David" });
> db.demo477.insertOne({ ClientId: 3, ClientName: "Bob" });
2. Xem document đầu tiên
> db.demo477.findOne();
{ "_id": ObjectId("5e82015fb0f3fa88e227908f"), "ClientId": 1, "ClientName": "Chris" }
3. Kiểm tra BSON size
> Object.bsonsize(db.demo477.findOne());
62
Kết quả: 62 bytes
Phân tích cấu trúc BSON (ước lượng)
| Thành phần | Kích thước ước lượng |
|---|---|
| Document overhead | ~5 bytes |
| _id (ObjectId) | 12 bytes + 4 (field name) + 1 (type) = ~17 |
| ClientId (int32) | 4 bytes + 9 (field name) + 1 = ~14 |
| ClientName (string "Chris") | 5 bytes + 10 (field name) + 1 = ~16 |
| Tổng cộng | ~52 bytes (gần 62 với padding/alignment) |
Ứng dụng thực tế
- Kiểm tra document có vượt giới hạn 16MB không
- Tối ưu schema: so sánh size trước/sau redesign
- Estimate storage: size * số document ≈ collection size
- Debug document quá lớn (large document)
Các lệnh liên quan
// Kích thước collection (data + index)
db.demo477.stats();
// { "size": 1024, "storageSize": 4096, "avgObjSize": 62, ... }
// Kích thước 1 document cụ thể (driver)
const bson = require('bson');
bson.calculateObjectSize(document); // Node.js
// Kiểm tra document lớn trong collection
db.demo477.aggregate([
{ $project: { size: { $bsonSize: "$$ROOT" } } },
{ $match: { size: { $gt: 16 * 1024 * 1024 } } } // > 16MB
]);
Lưu ý
Object.bsonsize()chỉ chạy trong mongo shell- Trong aggregation (MongoDB 4.4+): dùng
$bsonSize - Kích thước BSON ≠ JSON string length (BSON có type info, binary encoding)
- Padding factor có thể làm size thực > size logic