MongoDB - Veritabanı Referansları
MongoDB ilişkilerinin son bölümünde görüldüğü gibi, MongoDB'de normalleştirilmiş bir veritabanı yapısı uygulamak için, kavramını kullanıyoruz. Referenced Relationships olarak da anılır Manual Referencesburada referans verilen belgenin kimliğini başka bir belgenin içinde manuel olarak saklıyoruz. Bununla birlikte, bir belgenin farklı koleksiyonlardan referanslar içerdiği durumlarda kullanabilirizMongoDB DBRefs.
DBRefs ve Manuel Referanslar
Manuel referanslar yerine DBRef'leri kullanacağımız bir örnek senaryo olarak, farklı koleksiyonlarda (adres_ev, adres_ofis, adres_sayısı vb.) Farklı adres türlerini (ev, ofis, posta vb.) Depoladığımız bir veritabanı düşünün. Şimdi, ne zamanuserkoleksiyonun belgesi bir adrese başvurursa, adres türüne bağlı olarak hangi koleksiyona bakılacağını da belirtmesi gerekir. Bir belgenin birçok koleksiyondaki belgelere referans verdiği bu tür senaryolarda, DBRefs kullanmalıyız.
DBRef'leri kullanma
DBRef'lerde üç alan vardır -
$ref - Bu alan, referans verilen belgenin koleksiyonunu belirtir
$id - Bu alan, referans verilen belgenin _id alanını belirtir
$db - Bu isteğe bağlı bir alandır ve referans verilen belgenin bulunduğu veritabanının adını içerir
DBRef alanına sahip örnek bir kullanıcı belgesini düşünün address kod pasajında gösterildiği gibi -
{
"_id":ObjectId("53402597d852426020000002"),
"address": {
"$ref": "address_home",
"$id": ObjectId("534009e4d852427820000002"),
"$db": "tutorialspoint"},
"contact": "987654321",
"dob": "01-01-1991",
"name": "Tom Benzamin"
}
address Buradaki DBRef alanı, referans verilen adres belgesinin içinde bulunduğunu belirtir. address_home altında koleksiyon tutorialspoint veritabanı ve 534009e4d852427820000002 kimliğine sahiptir.
Aşağıdaki kod, tarafından belirtilen koleksiyona dinamik olarak bakar. $ref parametre (address_home bizim durumumuzda) tarafından belirtildiği gibi kimliğe sahip bir belge için $id DBRef parametresi.
>var user = db.users.findOne({"name":"Tom Benzamin"})
>var dbRef = user.address
>db[dbRef.$ref].findOne({"_id":(dbRef.$id)})
Yukarıdaki kod, aşağıdaki adres belgesinde bulunan address_home koleksiyon -
{
"_id" : ObjectId("534009e4d852427820000002"),
"building" : "22 A, Indiana Apt",
"pincode" : 123456,
"city" : "Los Angeles",
"state" : "California"
}