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.

  • 🔑 Başlıca Kilit Rol: _id alanı, bir veritabanındaki her belgeyi benzersiz şekilde tanımlayan birincil anahtardır. MongoDB toplama.
  • 🆔 Varsayılan Nesne Kimliği: _id'yi atlarsanız, MongoDB Belgeye otomatik olarak benzersiz bir 12 baytlık ObjectId değeri ekler.
  • ⏱️ Zamana Göre Sıralanmış: Bir ObjectId, 4 baytlık bir zaman damgasıyla başlar, bu nedenle kimlikler kabaca oluşturulma zamanına göre sıralanabilir.
  • ✍️ Özel Anahtarlar: Belge eklerken, sayı veya metin gibi kendi _id değerinizi belirtebilirsiniz.
  • 🔒 Değişmez: _id değeri bir kez ayarlandıktan sonra değiştirilemez; değiştirmek için silmeniz ve yeniden eklemeniz gerekir.

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

Birincil Anahtar girişi MongoDB

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:

  1. 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ı:

Birincil Anahtar girişi MongoDB

Çı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.

SSS

Hayır. _id alanı, bir belge oluşturulduktan sonra değiştirilemez. Değiştirmek için mevcut belgeyi silmeniz ve istediğiniz _id değeriyle yeni bir belge eklemeniz gerekir.

_id alanı, ObjectId, tamsayılar, dizeler ve hatta gömülü belgeler de dahil olmak üzere çoğu BSON türünü kabul eder. Tek kural, değerin koleksiyon içinde benzersiz olması ve dizi olmamasıdır.

Evet. MongoDB Her koleksiyon için _id alanında otomatik olarak benzersiz bir indeks oluşturur. Bu indeks silinemez ve birincil anahtara göre aramaları çok hızlı hale getirir.

Yapay zeka, bir ObjectId'nin zaman damgasını açıklayabilir, kod üretebilir vetracgetTimestamp() ile oluşturma zamanını alın ve ObjectId'leri dizelere dönüştürün,ping Geliştiriciler, belge tanımlayıcılarını daha hızlı bir şekilde hata ayıklayabilir ve anlayabilirler.

Evet. Yapay zeka, sorgu kalıplarınıza, benzersizlik ihtiyaçlarınıza ve bölümleme planlarınıza bağlı olarak varsayılan ObjectId'yi mi yoksa e-posta veya UUID gibi özel bir _id'yi mi kullanacağınız konusunda size tavsiyede bulunabilir.

Bu yazıyı şu şekilde özetleyin: