2011-04-21 31 views
17

我一直在使用它與一個新的項目,但這也是我第一次使用MongoDB。定義一個模式似乎沒有必要,因爲我認爲mongo的優勢在於它不需要定義的方案。無論是架構如何,我都不能即時保存對象嗎?那我爲什麼要?此外,文件缺乏,使我可以很容易地在蒙戈殼中做一些事情,然後他們應該做到。使用Mongoose ORM的兇手是什麼原因?

+3

當調用MongoDB無模式時,它確實指的是數據庫本身不需要模式也不需要模式遷移的事實。這並不意味着你的數據總是非結構化的 - 在大多數情況下,你希望你的數據是結構化的,本質上它通常是。 – 2011-04-22 01:19:40

+0

肯定有你想要遷移數據的情況。 – chovy 2012-10-29 08:15:02

+0

@nbro - 編輯這個問題的值爲零,只是爲了添加換行符,*特別是*因爲1)它已經有4年了,並且2)在今天的StackOverflow指導下,這個問題現在變成了基於意見的主題。你甚至沒有花時間編輯關於一個新項目的序言和第一次使用MongoDB(這是完全多餘的)。 – 2015-11-14 18:08:33

回答

16

有關MongoDB for MongoDB的最好的事情是,您可以對要插入/更新的數據進行內置自動驗證。貓鼬還可以讓你預先定義要發生的事件,比如在文檔被保存之前。這非常強大,因爲它合併了您必須編寫的代碼,並將代碼放置在文檔邏輯旁邊而不是應用程序邏輯中。

檢出middleware並驗證了一些示例。 alexyoung/Github上的Nodepad在models.js file中有一些很好的示例。

6

事先了解一個已定義的模式可能會很方便,因爲這樣您就可以做出假設,否則您可能無法做到這一點。

例如,如果我有一個Post架構,那麼我可以假定它有一個body字段,並將其用作String而不檢查其存在。

即使在我明確定義的模型中,我也可以在其中包含一個等效的無模式文檔,例如,

mongoose.model('Post', new Schema({ 
    body: String, 
    meta: {} 
})); 

然後我可以很簡單地隨機添加隨機數據myPost.meta在突發奇想。它爲我定義的模式和無模式之間提供了非常好的平衡。

0

我已經使用了Mongoose,我不得不說我完全同意定義你的Schema預先嚴重限制了MongoDB。 Mongoose背後的想法是使其安全並允許輕鬆維護,但並不真正吸引基於文檔的數據庫。

+0

我檢查出非常接近發佈的貓鼬,這篇文章和操作的帖子指出的是 - 你從來沒有真正閱讀過文檔。 Mongoose的字段總是具有混合模式類型,它允許任何和所有您希望節省的臨時數據。事實上,如果你願意的話 - 你可以讓你的收藏品以這樣的方式行事,但它會嚴重阻礙你的應用程序。如果您需要檢查數據是否始終存在,則實際上沒有任何結構,這會導致錯誤,問題和數據不一致。 – Oddman 2013-07-19 13:02:16

3

你真的可以去任何一個方式。 MongoDB在很多其他語言中有很多流行的映射器:Morphia for Java,PHP學說,Mongoid/Mongomapper for Ruby等。

即使MongoDB是「無模式」,它也不是「無模式」。關於知道從數據庫中獲得什麼,有些事情需要說明。

當然,關於構建臨時對象並保存它也有一些優雅之處。在這一點上,node.js是非常新的,它可能是最好的與你喜歡的東西一起工作。

此外,文件缺乏,使我可以很容易地在mongo shell中做的一些事情,他們應該很難。

貓鼬仍然是一個社區項目,它是比較新的。如果有文檔丟失或需要寫入,我相信開發團隊會喜歡這個幫助。你可能會連接它們on the groups

相關問題