English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
همانطور که در فصل آخر از MongoDB Relationships دیده شده است، برای ایجاد یک ساختار دیتابیس استاندارد در MongoDB، ما از مفهوم رابطه مرجوع شده (همچنین به عنوان مراجعه دستی معروف است) استفاده کردهایم، جایی که ما دستی id مستندات مرجوع شده را در مستندات دیگر ذخیره کردهایم. اما در مواردی که مستندات از مستندات چندین مجموعه استفاده میکنند، میتوانیم از MongoDB استفاده کنیم DBRefs.
به عنوان سناریوی مثال، در حالی که از DBRef به جای مراجعه دستی استفاده میکنیم، لطفاً دیتابسی را در نظر بگیرید که در آن ما آدرسهای مختلف (خانگی، دفتر، پست و غیره) را در مجموعههای مختلف (address_home، address_office، address_mailing و غیره) ذخیره میکنیم. حالا، وقتی مستندات مجموعه user به آدرسها مراجعه میکنند، باید بر اساس نوع آدرس، مجموعه مورد نظر را مشخص کنند. در مواردی که مستندات به مستندات چندین مجموعه مراجعه میکنند، باید از DBRefs استفاده کنیم.
سه فیلد در DBRefs وجود دارد-
$ref
−این فیلد مشخص میکند که مجموعه مستند مورد اشاره را معرفی میکند
$id
−این فیلد مشخص میکند که فیلد _id مستند مورد اشاره را معرفی میکند
$db
−این یک فیلد اختیاری است که نام دیتابیس مستند مورد اشاره را شامل میشود
مثال یک مستند کاربر با فیلد DBRef در نظر بگیرید،address
مانند کد فصل نشان داده شده -
{ "_id": ObjectId("53402597d852426020000002"), "address": { "$ref": "address_home", "$id": ObjectId("534009e4d852427820000002"), "$db": "w3codebox"}, "contact": "987654321", "dob": "01-01-1991", "name": "Tom Benzamin" }
عنوان اینجا DBRef فیلد مشخص میکند که مستند مورد اشاره در مجموعه address_home دیتابیس w3codebox قرار دارد، id آن 534009e4d8524278200000002 است.
النص الأتي يجري البحث بشكل ديناميكي في مستند ID المحدد من قبل $id في المجموعة المحددة من قبل $ref (في حالتنا address_home).
>var user = db.users.findOne({"name":"Tom Benzamin"}) >var dbRef = user.address >db[dbRef.$ref].findOne({"_id":(dbRef.$id)})
النص الأتي يعودaddress_home
وثائق العنوان الموجودة في المجموعة -
{ "_id" : ObjectId("534009e4d852427820000002"), "building" : "22 A, Indiana Apt", "pincode" : 123456, "city" : "Los Angeles", "state" : "California" }