Mongodb Birincil Anahtarı: _id alanını ObjectId() ile ayarlama örneği
⚡ Akıllı Özet
MongoDB Birincil Anahtar, bir koleksiyondaki her belgeyi benzersiz şekilde tanımlayan _id alanıdır. Varsayılan olarak otomatik olarak oluşturulmuş bir ObjectId içerir, ancak bir belge eklerken _id alanına kendi değerinizi de atayabilirsiniz.

Birincil Anahtar Nedir? MongoDB?
In MongoDB, _id alanını koleksiyon için birincil anahtar olarak kullanın, böylece her belge koleksiyonda benzersiz şekilde tanımlanabilsin. _id alanı benzersiz bir ObjectID değeri içerir.
Koleksiyona belge eklerken varsayılan olarak alan adına _id içeren bir alan adı eklemezseniz, o zaman MongoDB aşağıda gösterildiği gibi otomatik olarak bir Nesne kimliği alanı ekleyecektir
Bir koleksiyondaki belgeleri sorguladığınızda koleksiyondaki her belgenin ObjectId'sini görebilirsiniz.
Bunu sağlamak istiyorsanız MongoDB koleksiyon oluşturulduğunda _id Alanını oluşturmaz ve koleksiyonun _id'si olarak kendi id'nizi belirtmek istiyorsanız bunu koleksiyonu oluştururken açıkça tanımlamanız gerekir.
Açıkça bir id alanı oluştururken, adında _id olacak şekilde oluşturulması gerekir.
Bunu nasıl başarabileceğimize dair bir örneğe bakalım.
db.Employee.insert({_id:10, "EmployeeName" : "Smith"})
Code Açıklama:
- Koleksiyondaki ilk belgeyi oluşturduğumuzu varsayıyoruz ve dolayısıyla yukarıdaki ifadede koleksiyonu oluştururken açıkça _id alanını tanımlıyoruz ve ona bir değer tanımlıyoruz.
Komut başarıyla yürütülürse ve şimdi koleksiyondaki belgeleri görüntülemek için find komutunu kullanırsanız, aşağıdaki Çıktı gösterilecektir
Çıktı:
Çıktı, koleksiyonu oluştururken tanımladığımız _id alanının artık koleksiyonun birincil anahtarı olarak kullanıldığını açıkça gösteriyor.
ObjectId nedir? MongoDB?
ObjectId, varsayılan değer türüdür. MongoDB _id birincil anahtarına atanır. Bu, sunucular ve koleksiyonlar arasında küresel olarak benzersiz olacak şekilde tasarlanmış 12 baytlık bir tanımlayıcıdır, bu nedenle iki belge neredeyse hiçbir zaman aynı değeri almaz. İstemci sürücüsü sunucuya sormadan bir ObjectId oluşturabildiği için, MongoDB Merkezi bir sayaç olmadan belgeleri hızlıca ekleyebilir ve birçok makine arasında ölçeklendirme yapabilir.
Her ObjectId, kompakt bir ikili biçimde saklanır ancak 24 karakterlik onaltılık bir dize olarak görüntülenir; örneğin ObjectId(“507f1f77bcf86cd799439011”). İlk baytlar geçerli zamana dayanır, bu da belgeler oluşturuldukça değerlerin sürekli olarak arttığı anlamına gelir. Bu, ObjectId'yi yalnızca benzersiz kılmakla kalmaz, aynı zamanda eklenme sırasına göre kabaca sıralanabilir hale getirir; bu da en yeni veya en eski kayıtları önce görmek istediğinizde kullanışlı bir özelliktir.
Yapısı MongoDB Nesne Kimliği
A MongoDB ObjectId tam olarak 12 bayt uzunluğundadır ve her bir bölümünün belirli bir anlamı vardır. Yapıyı anlamak, ObjectId'lerin neden benzersiz ve zamana bağlı olduğunu açıklamaya yardımcı olur:
- 4 baytlık zaman damgası: ObjectId'nin oluşturulduğu Unix epoch'undan bu yana geçen saniye sayısı. Bu, kimliklerin zamana göre sıralanabilmesini sağlar.
- 5 baytlık rastgele değer: İşlem başına bir kez oluşturulan bu değer, makine ve işlem kimliğini birleştirir; bu nedenle farklı istemciler farklı kimlikler üretir.
- 3 baytlık artan sayaç: Rastgele bir değerden başlayıp aynı saniye içinde eklenen her yeni ObjectId ile artan ve hızlı eklemeler sırasında çakışmaları önleyen bir sayaç.
Bu üç bölüm birlikte, birçok belge aynı anda farklı sunuculara eklendiğinde bile her ObjectId'nin benzersiz olmasını garanti eder. Bir ObjectId üzerinde getTimestamp() yöntemini çağırarak istediğiniz zaman gömülü oluşturma zamanını okuyabilirsiniz.
ObjectId'yi Birincil Anahtar Olarak Kullanmanın Avantajları
Varsayılan ObjectId'yi _id birincil anahtarı olarak kullanmak çeşitli pratik avantajlar sunar, bu nedenle çoğu kişi bunu tercih eder. MongoDB Koleksiyonlar buna bağlıdır:
- Otomatik oluşturma: Anahtar değerlerini kendiniz oluşturmanıza veya yönetmenize gerek kalmaz, bu da yinelenen anahtarların oluşma olasılığını azaltır.
- Küresel benzersizlik: ObjectId'ler sunucular arasında benzersiz kalır, bu nedenle dağıtılmış ve parçalanmış dağıtımlarda iyi çalışırlar.
- Dahili zaman damgası: Dahili oluşturma zamanı özelliği, ek bir tarih alanına ihtiyaç duymadan belgeleri yaşa göre sıralamanıza veya filtrelemenize olanak tanır.
- Yüksek performans: İstemci tarafında üretim, sunucuya gidiş geliş ihtiyacını ortadan kaldırır.ping Hızlı takılıyor.
ObjectId çoğu uygulama için uygun olsa da, sorguları basitleştiren doğal bir iş anahtarı söz konusu olduğunda e-posta adresi veya ürün kodu gibi özel bir _id seçebilirsiniz. Doğru seçim, verilerinizi nasıl arayıp ilişkilendirmeyi planladığınıza bağlıdır.


