MongoDB チュートリアルlogin
MongoDB チュートリアル
著者:php.cn  更新時間:2022-04-21 17:49:03

MongoDB の関係


MongoDB 関係は、複数のドキュメント間の論理的な相互接続を表します。

文書間の関係は、埋め込みと引用によって確立できます。

MongoDB の関係は次のとおりです:

  • 1:1 (1 対 1)

  • 1: N (1 対多)

  • N: 1 (多対 1)

  • N : N(多対多)


次に、ユーザーとユーザーアドレスの関係を考えてみましょう。

ユーザーは複数のアドレスを持つことができるため、1 対多の関係になります。

以下は user ドキュメントの単純な構造です:

{
   "_id":ObjectId("52ffc33cd85242f436000001"),
   "name": "Tom Hanks",
   "contact": "987654321",
   "dob": "01-01-1991"
}

以下は address ドキュメントの単純な構造です:

{
   "_id":ObjectId("52ffc4a5d85242602e000000"),
   "building": "22 A, Indiana Apt",
   "pincode": 123456,
   "city": "Los Angeles",
   "state": "California"
}

埋め込まれた関係

embedding メソッドを使用すると、ユーザー アドレスを埋め込むことができますユーザーのドキュメントに:

   "_id":ObjectId("52ffc33cd85242f436000001"),
   "contact": "987654321",
   "dob": "01-01-1991",
   "name": "Tom Benzamin",
   "address": [
      {
         "building": "22 A, Indiana Apt",
         "pincode": 123456,
         "city": "Los Angeles",
         "state": "California"
      },
      {
         "building": "170 A, Acropolis Apt",
         "pincode": 456789,
         "city": "Chicago",
         "state": "Illinois"
      }]
}

上記のデータは 1 つのドキュメントに保存されるため、データの取得と管理が容易になります。 次のようにユーザーのアドレスをクエリできます:

>db.users.findOne({"name":"Tom Benzamin"},{"address":1})

注: 上記のクエリでは、dbusers はデータベースとコレクションを表します。

このデータ構造の欠点は、ユーザーとユーザー アドレスが増加し続け、データ量が増加し続けると、読み取りおよび書き込みのパフォーマンスに影響することです。

参照関係

参照関係は、データベースを設計する際によく使われる手法で、ユーザーデータ文書とユーザーアドレスデータ文書を分離し、文書のidフィールドを参照することで関係を確立します。

{
   "_id":ObjectId("52ffc33cd85242f436000001"),
   "contact": "987654321",
   "dob": "01-01-1991",
   "name": "Tom Benzamin",
   "address_ids": [
      ObjectId("52ffc4a5d85242602e000000"),
      ObjectId("52ffc4a5d85242602e000001")
   ]
}

上記の例では、ユーザー ドキュメントの address_ids フィールドには、ユーザーのアドレスの ObjectId 配列が含まれています。

これらのユーザー アドレスのオブジェクト ID (ObjectId) を読み取ることで、ユーザーの詳細なアドレス情報を取得できます。

このメソッドには 2 つのクエリが必要です。1 回目はユーザーのアドレスのオブジェクト ID (ObjectId) をクエリし、2 回目はクエリ ID を通じてユーザーの詳細なアドレス情報を取得します。

りー

PHP中国語ウェブサイト