2014-02-18 39 views
1

我是新來的mongoDB和我使用貓鼬爲我的數據庫創建模式的節點項目。我已經明白,在我的情況下,我應該使用嵌入式數據而不是引用。 (http://docs.mongodb.org/manual/core/data-modeling-introduction/mongoDB + mongoose:爲分層數據選擇正確的模式

,我需要在數據庫中存儲的結構是這樣的:

  • |標題
  • | |章
  • | | |內容(url到html文件)

來自mySQL世界,我想了解noSQL數據庫的概念,我想知道如何設計貓鼬模式。

THX,

+1

對於某些*建議的*模式格式,這可能會從您的更多內容中受益。然後實際上詢問每個「*優點和缺點」,同時給出一些你的**使用**例子。看起來就是你想要的。目前,這個問題有點過於寬泛。有人可能會關閉它。不要害羞,並**編輯**。 –

+0

thx,我會盡快編輯我的文章。 – kevinius

回答

1

您可以文檔和MongoDB的文檔中的文件數組:

db.books.findOne(); 

可以返回一個JSON:

{ 
    isbn:"253GHST78F6", 
    title:"some book", 
    author:"Earnest Hemmingway", 
    chapters:[ 
    {title:"chapter 1",content:"http://api.com/chapters/1.html"}, 
    {title:"chapter 2",content:"http://api.com/chapters/2.html"} 
    ] 
} 

但是,有一些事情要記住當在MongoDB中建模集合時:

  1. 模型數據爲儘可能接近要求的內容:沒有在MongoDB中加入,因此,儘量將所有這些數據放在一起(預加入),這應該在將來一起查詢。

  2. 嵌套是很好的查詢,但嵌套的更新和搜索是壞:

    1. 索引和內部嵌套的文件,尤其是搜索陣列,將是昂貴的。
    2. 避免在嵌套數組中放置任何數據,這是非常頻繁更新的。
  3. 沒有Foriegn Keys在MongoDB中。因此,如果您將同一文檔的多個副本嵌套在不同的集合中,則保持所有這些副本都是您的責任。

+0

如果嵌套搜索不好,如果沒有真正的關係(就像在關係數據庫中一樣),那麼我會創建一個新的集合,它更容易獲得所有x作者的書籍,還是我可以只查詢上面的模式? – kevinius

+0

@kevinius是的,你可以通過ObjectId在集合之間進行鏈接。 –

1

先來看看這個Martin Fowlers excellent video

我覺得沒有可以解釋的NoSQL,然後福勒更好的權威。特別是知道他的SQL背景。

其次,MongoDB遵循json模式。如果你知道如何使用json,你將會知道如何使用nosql(mongodb)。需要了解的基本原理是Mongo模式是用使用它的語言表達的。 因此,如果您在Mongo中使用NodeJS,您仍然有對象和數組可供使用。簡而言之,Mongo不會強制任何特定的模式。開發人員根據他的語言/ mongo驅動程序創建他的方案。

那麼你如何表達你的語言數據邏輯?如果它是以JS對象的形式,那麼將該表單移動到db。

我真的很喜歡MongoDB,因爲它可以結合一些偉大的JS工具,如Underscore.js所有類型的數據操作。

+0

Thx爲電影,我只是看着它,很棒的發現。 – kevinius

+0

很高興提供幫助 - 如果你喜歡,請接受答案:) – carousel