English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

MongoDB データベース参照

MongoDBの関係の最後の章で見たように、MongoDBで正規化されたデータベース構造を実現するために、参照関係の概念(手動参照と呼ばれる)を使用しました。これは、参照されるドキュメントのidを他のドキュメントに手動で保存する方法です。しかし、ドキュメントが異なるコレクションからの参照を持つ場合、MongoDBを使用することができます DBRefs。

DBRefと手動参照

DBRefを使用する例として、DBRefではなく手動で参照を使用する場合を考える。例えば、異なる種類のアドレス(家庭、オフィス、メールなど)を異なるコレクション(address_home、address_office、address_mailingなど)に格納するデータベースを使用する。現在、user コレクションのドキュメントがアドレスを参照する場合、アドレスの種類に応じて検索するコレクションを指定する必要があります。複数のコレクションに参照されるドキュメントがある場合、DBRefsを使用する必要があります。

DBRefの使用

DBRefsには3つのフィールドがあります-

  • $ref −このフィールドは参照されるドキュメントのコレクションを指定します

  • $id −このフィールドは参照されるドキュメントの _id フィールドを指定します

  • $db −これはオプションのフィールドで、参照されるドキュメントが所在するデータベースの名前を含んでいます

DBRef フィールドを持つサンプルユーザードキュメントを考えるaddressコードスニペットが示すように-

{
   "_id": ObjectId("53402597d852426020000002",
   "address": {
   "$ref": "address_home",
   "$id": ObjectId("534009e4d852427820000002",
   "$db": "w"3codebox"},
   "contact": ""987654321",
   "dob": "0"1-01-1991",
   "name": "Tom Benzamin"
}

ここのアドレス DBRef フィールドは、参照されるアドレスドキュメントが w3codebox データベースの address_home コレクションに、id が534009e4d8524278200000002。

以下のコードは、$refパラメータ(この例ではaddress_home)で指定されたコレクションに、DBRefの$idパラメータで指定されたidのドキュメントを検索します。

>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"
}