mongodb關係

MongoDB 關係

MongoDB 的關係表示多個文檔之間在邏輯上的相互聯繫。數據庫

文檔間能夠經過嵌入和引用來創建聯繫。數組

MongoDB 中的關係能夠是:數據結構

  • 1:1 (1對1)
  • 1: N (1對多)
  • N: 1 (多對1)
  • N: N (多對多)

 

接下來咱們來考慮下用戶與用戶地址的關係。性能

一個用戶能夠有多個地址,因此是一對多的關係。ui

如下是 user 文檔的簡單結構:spa

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

嵌入式關係

使用嵌入式方法,咱們能夠把用戶地址嵌入到用戶的文檔中:code

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

注意:以上查詢中 db 和 users 表示數據庫和集合。ci

這種數據結構的缺點是,若是用戶和用戶地址在不斷增長,數據量不斷變大,會影響讀寫性能。

引用式關係

引用式關係是設計數據庫時常常用到的方法,這種方法把用戶數據文檔和用戶地址數據文檔分開,經過引用文檔的 id 字段來創建關係。

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

以上實例中,用戶文檔的 address_ids 字段包含用戶地址的對象id(ObjectId)數組。

咱們能夠讀取這些用戶地址的對象id(ObjectId)來獲取用戶的詳細地址信息。

這種方法須要兩次查詢,第一次查詢用戶地址的對象id(ObjectId),第二次經過查詢的id獲取用戶的詳細地址信息。

>var result = db.users.findOne({"name":"Tom Benzamin"},{"address_ids":1})
>var addresses = db.address.find({"_id":{"$in":result["address_ids"]}})
相關文章
相關標籤/搜索