2016-04-21 37 views
-1

我正在學習MEAN框架。我不明白爲什麼mongodb如此受歡迎以至於它是在框架中構建的,並且您無法輕鬆更改數據庫(或者我可以嗎?)。MEAN - 在mongodb和關係數據庫中的數據庫

我的問題是。

  • 爲什麼在MEAN框架中使用mongodb?
  • 爲什麼noSql和Sql數據庫之間沒有任何選擇?
  • MEAN框架(使用mongodb)僅適用於某些類型的Web項目或任何類型的Web項目?
  • 如何在mongodb中創建這個示例數據庫?

如果我有例如,這關係數據庫:

User 
    id 
    name 

Car 
    id 
    user_id 
    car_make_id  
    name 

CarMake 
    id 
    Name 

比它可以輕鬆進行查詢:

  1. 讓我看看用戶和他的汽車。一個帶連接的查詢。
  2. 向我展示我的系統,車主及其類型中的所有車輛。一個帶連接的查詢。

當我創建這個數據庫MongoDB中:

  • 我失去了真正的數據庫事務的能力。
  • mongodb中應該如何最好地實現這個數據庫?我可以使用相同的數據庫結構,但它會變慢,因爲當我創建上述查詢時,我將不得不向數據庫發出更多請求。或者使用$ lookup的查詢將比sql數據庫中的實際連接慢 - 是嗎?

我可以改變數據庫結構這樣

User 
    id: 
    name: 
    cars: [] 

Car 
    id: 
    car_make_id: 
    name: 

CarMake 
    id: 
    Name: 

或者,我可以改變數據庫的結構是這樣的。汽車列表嵌入用戶內部。

User 
    id: 
    name: 
    cars: 
    [ 
    { 
     id: 
     car_make_id: 
     name: 
    } 
    ] 

CarMake 
    id: 
    Name: 

但我該如何得到:向我展示所有汽車在我的系統,業主和他們的類型。你能幫助我以mongodb的方式看世界嗎?

回答

0

MEAN棧基本上用來創建單頁面應用程序。並強烈關注頁面(我的意思是應用程序的體系結構。)

1)。 mongoDb的最佳實踐是爲頁面創建集合。這意味着如果一個頁面使用多種類型的數據。 embed集合中的文檔(一個集合中有多種類型的數據,但在某些情況下,我們需要製作references而不是嵌入)。 2)。 Mongodb使用JSON來處理事務,並且它很容易在JavaScript框架中使用。 3)。 Mongodb使用緩存(它使用RAM將最近的數據保存在內存中),比如javascript。因此,查詢速度很快很容易(因爲使用硬盤的IO較少)。

爲了您的例子,你可以因爲你可以用第一個集合的ID索引使用

User:{id: 
     name: 
     cars: 
     [ 
     { 
      id: 
      car_make_id: 
      name: 
     } 
     ]}  


CarMake:{ 
     id: 
     Name:} 

。由於您可以一次檢索所有數據。 (如果您嵌入集合,文檔中的所有數據都位於硬盤中的近端塊中,因此數據檢索速度很快)

+0

在此數據庫結構中。我如何查看系統中的所有車輛?我必須檢索所有用戶並閱讀所有嵌入式汽車? –

+0

不可以。您可以將不同的命令與'Cars.name'一起使用。否則你可以使用聚合框架來實現。但是當你設計數據庫時。首先設計應用程序和數據庫。 (當我們使用關係型數據庫時,會發生相反的事情。) –

+0

請考慮在你得到幫助時接受答案。它會幫助其他同類問題。 –