我一直在使用它與一個新的項目,但這也是我第一次使用MongoDB。定義一個模式似乎沒有必要,因爲我認爲mongo的優勢在於它不需要定義的方案。無論是架構如何,我都不能即時保存對象嗎?那我爲什麼要?此外,文件缺乏,使我可以很容易地在蒙戈殼中做一些事情,然後他們應該做到。使用Mongoose ORM的兇手是什麼原因?
回答
有關MongoDB for MongoDB的最好的事情是,您可以對要插入/更新的數據進行內置自動驗證。貓鼬還可以讓你預先定義要發生的事件,比如在文檔被保存之前。這非常強大,因爲它合併了您必須編寫的代碼,並將代碼放置在文檔邏輯旁邊而不是應用程序邏輯中。
檢出middleware並驗證了一些示例。 alexyoung/Github上的Nodepad在models.js file中有一些很好的示例。
事先了解一個已定義的模式可能會很方便,因爲這樣您就可以做出假設,否則您可能無法做到這一點。
例如,如果我有一個Post
架構,那麼我可以假定它有一個body
字段,並將其用作String
而不檢查其存在。
即使在我明確定義的模型中,我也可以在其中包含一個等效的無模式文檔,例如,
mongoose.model('Post', new Schema({
body: String,
meta: {}
}));
然後我可以很簡單地隨機添加隨機數據myPost.meta在突發奇想。它爲我定義的模式和無模式之間提供了非常好的平衡。
我已經使用了Mongoose,我不得不說我完全同意定義你的Schema預先嚴重限制了MongoDB。 Mongoose背後的想法是使其安全並允許輕鬆維護,但並不真正吸引基於文檔的數據庫。
我檢查出非常接近發佈的貓鼬,這篇文章和操作的帖子指出的是 - 你從來沒有真正閱讀過文檔。 Mongoose的字段總是具有混合模式類型,它允許任何和所有您希望節省的臨時數據。事實上,如果你願意的話 - 你可以讓你的收藏品以這樣的方式行事,但它會嚴重阻礙你的應用程序。如果您需要檢查數據是否始終存在,則實際上沒有任何結構,這會導致錯誤,問題和數據不一致。 – Oddman 2013-07-19 13:02:16
你真的可以去任何一個方式。 MongoDB在很多其他語言中有很多流行的映射器:Morphia for Java,PHP學說,Mongoid/Mongomapper for Ruby等。
即使MongoDB是「無模式」,它也不是「無模式」。關於知道從數據庫中獲得什麼,有些事情需要說明。
當然,關於構建臨時對象並保存它也有一些優雅之處。在這一點上,node.js是非常新的,它可能是最好的與你喜歡的東西一起工作。
此外,文件缺乏,使我可以很容易地在mongo shell中做的一些事情,他們應該很難。
貓鼬仍然是一個社區項目,它是比較新的。如果有文檔丟失或需要寫入,我相信開發團隊會喜歡這個幫助。你可能會連接它們on the groups。
- 1. 握手失敗的原因是什麼?
- 2. 是什麼原因
- 3. 使用OpenJDK的原因是什麼?
- 4. 使用esb的原因是什麼
- 5. BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLE的原因是什麼?
- 6. RejctedExecutionException的原因是什麼?
- 7. 'System.IO.IsolatedStorage.IsolatedStorageException'的原因是什麼?
- 8. 什麼是UnsatisfiedLinkError的原因?
- 9. UnsupportedClassVersionError的原因是什麼?
- 10. ChangeConflictException的原因是什麼?
- 11. PlatformID.MacOSX是什麼原因?
- 12. java.lang.reflect.InvocationTargetException:這是什麼原因?
- 13. Android:棄用startManagingCursor的原因是什麼?
- 14. 使用還原反應的原因是什麼?
- 15. 高壓縮視頻中顯示的塊的原因/使用/原因是什麼?
- 16. .htaccess不準確的原因是什麼
- 17. WordPress plugin_url()函數的原因是什麼?
- 18. 導致ServiceActivationException的原因是什麼?
- 19. AADSTS90009的主要原因是什麼?
- 20. fsockopen()錯誤的原因是什麼?
- 21. StageWebView失敗的原因是什麼?
- 22. 在Javascript中使用===而不是== typeof的原因是什麼?
- 23. 什麼是使用ndarray而不是python數組的原因
- 24. 在rails中使用observe_field而不是onkeydown的原因是什麼?
- 25. 使用的原因是什麼(如果是false!== ...)
- 26. 是什麼差距的原因的DIV
- 27. Classformat異常的原因是什麼?
- 28. 什麼是以下錯誤的原因
- 29. 我的NullPointerException的原因是什麼?
- 30. Valgrind錯誤的原因是什麼?
當調用MongoDB無模式時,它確實指的是數據庫本身不需要模式也不需要模式遷移的事實。這並不意味着你的數據總是非結構化的 - 在大多數情況下,你希望你的數據是結構化的,本質上它通常是。 – 2011-04-22 01:19:40
肯定有你想要遷移數據的情況。 – chovy 2012-10-29 08:15:02
@nbro - 編輯這個問題的值爲零,只是爲了添加換行符,*特別是*因爲1)它已經有4年了,並且2)在今天的StackOverflow指導下,這個問題現在變成了基於意見的主題。你甚至沒有花時間編輯關於一個新項目的序言和第一次使用MongoDB(這是完全多餘的)。 – 2015-11-14 18:08:33