MongoDB - Referensi Database
Seperti yang terlihat di bab terakhir hubungan MongoDB, untuk mengimplementasikan struktur database yang dinormalisasi di MongoDB, kami menggunakan konsep Referenced Relationships juga disebut sebagai Manual Referencesdi mana kita secara manual menyimpan id dokumen yang direferensikan di dalam dokumen lain. Namun, dalam kasus di mana dokumen berisi referensi dari koleksi yang berbeda, kami dapat menggunakanMongoDB DBRefs.
DBRefs vs Referensi Manual
Sebagai contoh skenario, di mana kita akan menggunakan DBRefs daripada referensi manual, pertimbangkan database tempat kita menyimpan berbagai jenis alamat (rumah, kantor, surat, dll.) Di koleksi yang berbeda (address_home, address_office, address_mailing, dll). Sekarang, saat auserdokumen collection mereferensikan sebuah alamat, ia juga perlu menentukan koleksi mana yang akan diperiksa berdasarkan jenis alamat. Dalam skenario seperti ini di mana dokumen mereferensikan dokumen dari banyak koleksi, kita harus menggunakan DBRefs.
Menggunakan DBRefs
Ada tiga bidang di DBRefs -
$ref - Bidang ini menentukan koleksi dokumen yang direferensikan
$id - Bidang ini menentukan bidang _id dari dokumen yang direferensikan
$db - Ini adalah bidang opsional dan berisi nama database tempat dokumen yang dirujuk berada
Pertimbangkan contoh dokumen pengguna yang memiliki kolom DBRef address seperti yang ditunjukkan di cuplikan kode -
{
"_id":ObjectId("53402597d852426020000002"),
"address": {
"$ref": "address_home",
"$id": ObjectId("534009e4d852427820000002"),
"$db": "tutorialspoint"},
"contact": "987654321",
"dob": "01-01-1991",
"name": "Tom Benzamin"
}
Itu address Kolom DBRef di sini menetapkan bahwa dokumen alamat yang direferensikan berada address_home koleksi di bawah tutorialspoint database dan memiliki id 534009e4d852427820000002.
Kode berikut secara dinamis terlihat dalam koleksi yang ditentukan oleh $ref parameter (address_home dalam kasus kami) untuk dokumen dengan id seperti yang ditentukan oleh $id parameter di DBRef.
>var user = db.users.findOne({"name":"Tom Benzamin"})
>var dbRef = user.address
>db[dbRef.$ref].findOne({"_id":(dbRef.$id)})
Kode di atas mengembalikan dokumen alamat berikut yang ada di address_home koleksi -
{
"_id" : ObjectId("534009e4d852427820000002"),
"building" : "22 A, Indiana Apt",
"pincode" : 123456,
"city" : "Los Angeles",
"state" : "California"
}