MongoDB

MongoDB Nesne Kimlikleri ve Kullanımları

Spread the love

İçindekiler

MongoDB ObjectId Yapısını Anlamak

MongoDB’de, ObjectId, belgeleri yönetmek için çok önemli olan 12 baytlık benzersiz bir tanımlayıcıdır. Akıllıca tasarımı, dağıtık sistemlerde bile küresel benzersizliği sağlar. Bileşenlerini inceleyelim:

  • Zaman Damgası (4 bayt): Unix epokinden (1 Ocak 1970, 00:00:00 UTC) itibaren geçen saniye sayısını temsil eder. Bu, verimli zaman tabanlı sorgulama ve sıralamayı kolaylaştırır.
  • Makine Tanımlayıcısı (3 bayt): ObjectId’yi oluşturan makineyi benzersiz bir şekilde tanımlar. Bu, farklı sunucularda çakışmaları önler.
  • İşlem Kimliği (2 bayt): Makinede çalışan işlemi tanımlar. Bu, tek bir makine içinde benzersizliği daha da netleştirir.
  • Sayaç (3 bayt): Tek bir saniye içinde aynı işlem ve makinede bile benzersizliği sağlayan artan bir sayaçtır. Bu, yüksek hacimli ekleme senaryolarını ele alır.

Bu gelişmiş yapı, ObjectId’lerin yalnızca benzersiz olmasını değil, aynı zamanda oluşturma zamanına göre verimli sıralama sunmasını ve çeşitli veritabanı işlemlerini kolaylaştırmasını sağlar.

ObjectId ve $oid: Ana Farklar ve Kullanım

ObjectId ve $oid terimleri sık sık karıştırılır, ancak farklı kavramları temsil ederler:

  • ObjectId: Uygulama kodunuzda kullanılan veri türünü ifade eder (örneğin, PyMongo’da Python’ın ObjectId‘si veya Mongoose’da JavaScript’in ObjectId’si). Benzersiz tanımlayıcının bellekteki gösterimidir.
  • $oid: Özellikle MongoDB sorgu belgelerinde kullanılan bir BSON tür operatörüdür. Veritabanını sorgularken bir ObjectId‘yi temsil etme şeklinizdir. $oid değerlerini doğrudan oluşturmazsınız; sürücünüz, uygulamanızın ObjectId‘sini sorgudaki $oid gösterimine dönüştürmeyi halleder.

Şöyle düşünün: ObjectId uygulamanızın dahili gösterimidir, $oid ise MongoDB sunucusunun sorgunuzu anlamasında gerekli çeviridir.

ObjectId’lerle Çalışmak: Pratik Örnekler

Popüler MongoDB sürücülerini kullanarak ObjectId’lerle belge eklemeyi görelim:

Python (PyMongo):


from pymongo import MongoClient, ObjectId

client = MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
collection = db["mycollection"]

new_document = {
    "_id": ObjectId(),
    "name": "Örnek Belge"
}

inserted_id = collection.insert_one(new_document).inserted_id
print(inserted_id)

Node.js (Mongoose):


const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/mydatabase');

const mySchema = new mongoose.Schema({
  name: String
});

const MyModel = mongoose.model('MyModel', mySchema);

const newDocument = new MyModel({ name: 'Örnek Belge' });
newDocument.save()
  .then(doc => console.log(doc._id))
  .catch(err => console.error(err));

Sürücülerin BSON’a dönüştürmeyi otomatik olarak yönettiğini unutmayın. _id: ObjectId() tanımlarsınız ve sürücü gerisini halleder.

Faydalı ObjectId Metotları

Çoğu sürücü, ObjectId’leri işlemek için kullanışlı metotlar sunar:

  • getTimestamp(): ObjectId’nin oluşturulma zaman damgasını temsil eden bir tarih saat nesnesi döndürür.
  • toString(): ObjectId’yi onaltılık dize gösterimine dönüştürür (günlük kaydı ve gösterim için kullanışlıdır).
  • equals(): İki ObjectId’yi eşitlik açısından karşılaştırır.

Sonuç

Görünüşte benzer olsalar da, ObjectId ve $oid MongoDB’de farklı roller oynar. Bu farkı anlamak, verimli veritabanı etkileşimi için çok önemlidir. Sürücünüz, uygulamanızın ObjectId‘si ile sorgularda kullanılan $oid arasında gerekli dönüşümü halleder, böylece düşük seviyeli BSON ayrıntıları yerine uygulama mantığına odaklanabilirsiniz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir