ما مستند BSON؟
سيقرأ المتعلمون مستندات BSON ويكتبونها في صدفة MongoDB، مع التعرّف إلى أنواع الحقول مثل السلاسل النصية والأرقام والمصفوفات والكائنات المتداخلة.
ما مستند BSON؟ درس مجاني في MongoDB Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في MongoDB Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة MongoDB Academy 4 دروس في المجموع.
بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.
JSON vs BSON: The Key Difference
You write MongoDB data as familiar JSON, but it's stored as BSON — binary JSON. It's faster to scan and supports richer types like dates and ObjectId.
The Structure of a BSON Document
A BSON document is just key-value pairs in curly braces, like a JS object. Every document needs an _id, and MongoDB auto-creates a unique one if you skip it.
// A minimal MongoDB document
{
_id: ObjectId('64a2f3b1c9e7e12345678901'),
name: 'Alice',
age: 30,
active: true
}
// _id is auto-generated if omitted on insert
// ObjectId encodes the insert timestamp in its first 4 bytesString, Number, and Boolean Fields
Most fields look like JSON: strings, numbers, true/false, and null. One tip — for money, use Decimal128 to avoid floating-point rounding errors. The code shows how.
// Explicit BSON number types in mongosh
db.products.insertOne({
name: 'Widget',
quantity: NumberInt(100), // 32-bit integer
price: NumberDecimal('9.99'), // Exact decimal for money
weight: 0.45 // Double (64-bit float)
});The Date BSON Type
Date is a real BSON type, not a string. That lets you sort and range-query by date efficiently. Never store dates as plain text — you'd lose all of that.
// Always use BSON Date, not strings
db.events.insertOne({
title: 'Conference',
startDate: new Date('2024-09-01'), // BSON Date
endDate: ISODate('2024-09-03T18:00:00Z')
});
// Range query works perfectly on Date fields:
db.events.find({ startDate: { $gte: new Date('2024-01-01') } });Nested Documents (Sub-Documents)
A field's value can be a whole document of its own — a nested document. An address fits naturally inside a user, and you query it with dot notation.
// Nested sub-document example
{
_id: ObjectId('...'),
name: 'Bob',
address: {
street: '123 Main St',
city: 'Chicago',
state: 'IL',
zip: '60601'
},
employer: {
name: 'Acme Corp',
since: ISODate('2020-03-01')
}
}
// Query by nested field:
db.users.find({ 'address.city': 'Chicago' });Arrays in BSON Documents
Arrays let one field hold a list — tags, roles, or even sub-documents. MongoDB can index each element, so checking "does this contain X?" stays fast.
// Document with arrays of primitives and sub-documents
{
_id: ObjectId('...'),
productName: 'Smart TV',
tags: ['electronics', '4K', 'HDR'],
reviews: [
{ user: 'alice', rating: 5, comment: 'Love it!' },
{ user: 'bob', rating: 4, comment: 'Good value.' }
]
}
// Query: documents where tags array contains '4K'
db.products.find({ tags: '4K' });Binary Data and ObjectId
BSON also stores raw Binary data and the special ObjectId. Neat trick: an ObjectId hides its creation time in its first bytes, so _id roughly sorts by insert order.
// Extracting timestamp from ObjectId in mongosh
const id = ObjectId('64a2f3b1c9e7e12345678901');
console.log(id.getTimestamp());
// ISODate('2023-07-03T10:15:29.000Z')
// The first 8 hex chars = 4-byte timestamp
// 64a2f3b1 = Unix epoch seconds => 2023-07-03Document Size Limit: 16 MB
Each document maxes out at 16 MB — huge for most data, and a nudge toward good modeling. For bigger files like videos, use GridFS, which splits them into chunks.
// GridFS upload example (Node.js driver)
const { GridFSBucket } = require('mongodb');
const bucket = new GridFSBucket(db, { bucketName: 'uploads' });
const uploadStream = bucket.openUploadStream('photo.jpg');
fs.createReadStream('/tmp/photo.jpg').pipe(uploadStream);
uploadStream.on('finish', () => console.log('Uploaded:', uploadStream.id));Flexible Schema in Practice
MongoDB doesn't force a schema, so two documents in one collection can have different fields. This flexible schema is a gift during fast, early development.
// Two documents in the same collection with different shapes
// This is perfectly valid in MongoDB
// User with social login
{ _id: ObjectId('...'), name: 'Alice', googleId: 'g_12345', createdAt: new Date() }
// User with email/password
{ _id: ObjectId('...'), name: 'Bob', email: 'bob@test.com', passwordHash: 'bcrypt...', createdAt: new Date() }Reading BSON in mongosh
The mongosh shell speaks a JavaScript-like syntax. Insert and it saves BSON; query and it prints clean, readable output with helpers like ObjectId and ISODate.
// mongosh: insert and read back
db.items.insertOne({ name: 'Chair', price: NumberDecimal('199.99'), createdAt: new Date() });
db.items.findOne({ name: 'Chair' });
// Output:
// {
// _id: ObjectId('64a2f3b1...'),
// name: 'Chair',
// price: Decimal128('199.99'),
// createdAt: ISODate('2024-01-15T10:23:00.000Z')
// }BSON Serialization in Node.js
With the Node.js driver you just use plain JS objects — it handles BSON conversion for you. You never build binary by hand; numbers and dates just work.
const { ObjectId, Decimal128 } = require('mongodb');
// JS object -> BSON automatically by the driver
const doc = {
_id: new ObjectId(), // BSON ObjectId
name: 'Widget', // BSON String
price: Decimal128.fromString('19.99'), // BSON Decimal128
stock: 100, // BSON Double (JS default)
createdAt: new Date(), // BSON Date
tags: ['sale', 'new'] // BSON Array
};
await db.collection('products').insertOne(doc);Quick Check
Test your understanding of MongoDB & NoSQL Databases concepts from this lesson.
Lesson Recap
You learned BSON extends JSON with richer types, that documents nest sub-documents and arrays, and that the schema is flexible. Next: collections vs SQL tables.
الأسئلة الشائعة
هل درس «ما مستند BSON؟» مجاني؟
نعم — نص درس «ما مستند BSON؟» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة MongoDB Academy، انتقل إلى CoddyKit PRO. تتضمن دورة MongoDB Academy 4 دروس في المجموع.
ماذا ستتعلم في «ما مستند BSON؟»؟
سيقرأ المتعلمون مستندات BSON ويكتبونها في صدفة MongoDB، مع التعرّف إلى أنواع الحقول مثل السلاسل النصية والأرقام والمصفوفات والكائنات المتداخلة. تتمرن على MongoDB Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ MongoDB Academy؟
لا تُشترط خبرة سابقة. MongoDB Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «ما مستند BSON؟»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس MongoDB Academy هذا؟
نعم. كل درس في MongoDB Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- ما مستند BSON؟
- المجموعات مقابل جداول SQL
- قواعد البيانات والمجموعات ومساحات الأسماء
- أساسيات صدفة mongosh