Mongodb-database-references

提供:Dev Guides
移動先:案内検索

MongoDB-データベース参照

MongoDBリレーションシップの最後の章で見たように、MongoDBに正規化されたデータベース構造を実装するために、参照ドキュメントのIDを他のドキュメント内に手動で保存する*手動参照*とも呼ばれる*参照リレーションシップ*の概念を使用します。 ただし、ドキュメントに異なるコレクションからの参照が含まれる場合は、 MongoDB DBRefs を使用できます。

DBRefと手動参照

手動参照の代わりにDBRefを使用するシナリオの例として、異なるコレクション(address_home、address_office、address_mailingなど)に異なるタイプのアドレス(home、office、mailingなど)を格納しているデータベースを考えます。 現在、 user コレクションのドキュメントが住所を参照する場合、住所タイプに基づいてどのコレクションを調べるかを指定する必要もあります。 ドキュメントが多くのコレクションのドキュメントを参照するようなシナリオでは、DBRefを使用する必要があります。

DBRefを使用する

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

  • $ ref -このフィールドは、参照されるドキュメントのコレクションを指定します
  • $ id -このフィールドは、参照されるドキュメントの_idフィールドを指定します
  • $ db -これはオプションのフィールドであり、参照されるドキュメントが存在するデータベースの名前が含まれます

コードスニペットに示すように、DBRefフィールド*アドレス*を持つサンプルユーザードキュメントを考えてください-

{
   "_id":ObjectId("53402597d852426020000002"),
   "address": {
   "$ref": "address_home",
   "$id": ObjectId("534009e4d852427820000002"),
   "$db": "finddevguides"},
   "contact": "987654321",
   "dob": "01-01-1991",
   "name": "Tom Benzamin"
}

ここの address DBRefフィールドは、参照されるアドレスドキュメントが finddevguides データベースの address_home コレクションにあり、534009e4d852427820000002のIDを持っていることを指定します。

次のコードは、DBRefの $ 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"
}