ใช้ Object.bsonsize() ใน MongoDB Shell
ฟังก์ชัน Object.bsonsize() คืนค่าขนาดของเอกสารในหน่วย **Bytes** ตามมาตรฐาน BSON
ตัวอย่างข้อมูล
> db.demo477.insertOne({ "ClientId": 1, "ClientName": "Chris" });
> db.demo477.insertOne({ "ClientId": 2, "ClientName": "David" });
> db.demo477.insertOne({ "ClientId": 3, "ClientName": "Bob" });
Query หาขนาดเอกสารแรก
> Object.bsonsize(db.demo477.findOne())
ผลลัพธ์
62
คำอธิบาย
- ขนาด 62 bytes รวม _id (ObjectId 12 bytes), ClientId (int32 4 bytes), ClientName (string + overhead)
- BSON encoding มี overhead: field name, type byte, length prefix สำหรับ string
- ใช้ตรวจสอบขนาดเอกสารก่อน insert (limit 16MB ต่อเอกสาร)
วิธีอื่น: ใช้ aggregation (MongoDB 4.4+)
db.demo477.aggregate([
{ $project: { size: { $bsonSize: "$$ROOT" } } }
]);
การประมาณขนาด (Estimation)
| Type | ประมาณขนาด (bytes) |
|---|---|
| ObjectId | 12 |
| Int32 | 4 |
| Int64 | 8 |
| Double | 8 |
| String | ความยาว + 1 (length byte) + overhead |
| Boolean | 1 |
| Date | 8 |
| Null | 1 |
ใช้งานจริง
// หาเอกสารที่ใหญ่ที่สุด
db.demo477.aggregate([
{ $project: { size: { $bsonSize: "$$ROOT" } } },
{ $sort: { size: -1 } },
{ $limit: 10 }
]);
// หาขนาดเฉลี่ย
db.demo477.aggregate([
{ $project: { size: { $bsonSize: "$$ROOT" } } },
{ $group: { _id: null, avgSize: { $avg: "$size" }, maxSize: { $max: "$size" } } }
]);