0Pricing
MongoDB Academy · Ders

BSON Belgesi Nedir?

Öğrenenler, MongoDB kabuğunda BSON belgelerini okuyup yazacak; dizeler, sayılar, diziler ve iç içe nesneler gibi alan türlerini tanıyacaktır.

BSON Belgesi Nedir?, CoddyKit'te ücretsiz bir MongoDB Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, MongoDB Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. MongoDB Academy kursu toplamda 4 dersten oluşur.

Bu dersin bazı bölümleri henüz çevrilmemiş olup İngilizce olarak gösterilmektedir.

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 bytes

String, 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-03

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

Sıkça Sorulan Sorular

“BSON Belgesi Nedir?” dersi ücretsiz mi?

Evet — “BSON Belgesi Nedir?” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve MongoDB Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. MongoDB Academy kursu toplamda 4 dersten oluşur.

“BSON Belgesi Nedir?” dersinde ne öğreneceğim?

Öğrenenler, MongoDB kabuğunda BSON belgelerini okuyup yazacak; dizeler, sayılar, diziler ve iç içe nesneler gibi alan türlerini tanıyacaktır. MongoDB Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

MongoDB Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te MongoDB Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“BSON Belgesi Nedir?” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu MongoDB Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her MongoDB Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. BSON Belgesi Nedir?
  2. Koleksiyonlar ve SQL Tabloları
  3. Veritabanları, Koleksiyonlar ve Ad Alanları
  4. mongosh Kabuğunun Temelleri
← MongoDB Academy Sayfasına Dön