MongoDB-データベースリファレンス

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

DBRefとマニュアルリファレンス

手動参照の代わりにDBRefを使用するシナリオの例として、さまざまなコレクション(address_home、address_office、address_mailingなど)にさまざまなタイプのアドレス(自宅、オフィス、郵送など)を格納しているデータベースについて考えてみます。さて、userコレクションのドキュメントはアドレスを参照します。また、アドレスタイプに基づいて調査するコレクションを指定する必要があります。ドキュメントが多くのコレクションのドキュメントを参照するようなシナリオでは、DBRefを使用する必要があります。

DBRefの使用

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

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

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

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

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

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

ザ・ address ここのDBRefフィールドは、参照先住所ドキュメントがにあることを指定します address_home 下のコレクション tutorialspoint データベースであり、IDは534009e4d852427820000002です。

次のコードは、によって指定されたコレクションを動的に検索します。 $ref パラメータ(address_home 私たちの場合)によって指定されたIDを持つドキュメントの場合 $id DBRefのパラメータ。

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