Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Lấy kích thước BSON thực tế của document MongoDB

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ầnKí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