Latest web development tutorials

MongoDBの関係

MongoDBの関係はロジックで複数のドキュメント間のインターリンケージを表明しました。

あなたは埋め込むと文書間の参照によって接触を確立することができます。

MongoDBの関係は次のようになります。

  • 1:1(1:1)
  • 1:N(1対多)
  • N:1(複数対1)
  • N:N(多対多)

次に私たちは、次のユーザとユーザのアドレスの関係を検討します。

ユーザは、多くの関係に一つで、複数のアドレスを持つことができます。

次は、 簡単ユーザー設定のドキュメントです:

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

以下は、単純な構造のアドレス文書であります:

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

組み込み関係

埋め込まれた方法を用いて、ユーザーのドキュメントにユーザーのアドレスを埋め込むことができます。

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

上記のデータは、単一のドキュメントに保存されている、あなたは、より簡単にデータにアクセスし、維持することができます。 あなたは、ユーザーのアドレスを問い合わせることができます:

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

注:上記のクエリのデシベルは、データベースとユーザーとコレクションを示しています。

このデータ構造の欠点は、ユーザーがあれば、データ量の増加に対処することはますます大きくなり、読み取りに影響を与え、性能を書き込むことです。

参照型の関係

参照タイプの関係は、多くの場合、ユーザ・データ・ファイルとユーザアドレスデータファイルを個別IDフィールド参考文献によって関係を構築することは、データベースの設計手法で使用されています。

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

上記の例ではユーザアドレス(たObjectId)配列のユーザIDのオブジェクトフィールドを含むaddress_ids文書。

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

この方法は、2つのクエリ、最初のクエリオブジェクトIDのユーザーのアドレス(たObjectId)、IDによるユーザーのクエリの詳細については、第2のアドレスが必要です。

>var result = db.users.findOne({"name":"Tom Benzamin"},{"address_ids":1})
>var addresses = db.address.find({"_id":{"$in":result["address_ids"]}})