我正在使用mongoose Schemas爲我的mongodb創建模型,並且我想知道是否使用默認值。我知道使用默認值對於createdAt和類似的值是有好處的,但在我的情況下,我的模式中有一堆屬性,這可能會導致客戶端中有很多空指針。我應該在我的貓鼬模式上使用默認值解決這個問題,還是應該在客戶端或者nodejs上處理這個問題?在mongodb(mongoose)中使用默認值來處理缺失的屬性
0
A
回答
1
我的答案只是爲了避免在模式字段未使用時使用默認值。在我的生產節點/蒙戈/貓鼬的應用程序,有一些點,有助於使這是一個很好的策略:
- 貓鼬不保存未使用的字段,即那些不具有默認的模式,並在創建操作期間未設置。這節省了大量的Mongo磁盤空間,因爲每個Mongo文檔都將字段名稱和值存儲在JSON文檔中。使用短字段名稱和避免不必要的默認值,我已經看到磁盤空間增加了60%。
- 當您在通過Mongoose查詢處理數據庫的NodeJS中編寫代碼時,即使未設置,您也會獲得可處理存在/不存在模式屬性的Mongoose裝飾對象。請注意,如果您執行model.find()操作,則這是默認行爲。就後端代碼而言,您不必擔心處理Javascript未定義的異常。 Mongoose將幫助設置架構中聲明的任何屬性,並且它也會反過來忽略(而不是序列化到數據庫)您添加的未聲明的任何屬性。
- 請注意,上述功能是昂貴的查詢。 底線:如果您在NodeJS中編寫代碼以在執行創建或更新方法時獲取/設置道具,則使用Mongoose裝飾的對象將處理架構默認值等。如果您只是查詢將數據發送回前端,結束(因爲),你應該在你的Mongoose查詢中使用.lean()方法 - 它們明顯更快。
在前端,不具有值,但需要缺省值可以與很容易地處理字段 - 屬性是1級深:該嵌套
var someField = myMongoDoc.attrWithoutDefault || 'default value';
屬性(例如myMongoDoc.attr1 .subAttr1)可以使用類似lodash的庫進行測試(請參閱https://lodash.com/docs#get)
+0
完美!謝謝 – mrlarssen
相關問題
- 1. 如何使用JSON.net的默認值來處理無效值的屬性
- 2. Webapi。定義默認的Json值時枚舉屬性缺失
- 3. HXT使用'orElse'用默認值替換丟失的屬性值
- 4. 默認屬性值
- 5. 使用SWXMLHash反序列化xml時處理缺失的屬性
- 6. Eloquent默認屬性值:$屬性或DB列默認值?
- 7. 處理在Vowpal中真正缺失的缺失值Wabbit
- 8. mongodb/mongoose保護屬性
- 9. IOS:默認屬性的值
- 10. 使用默認值定義來自環境的ant屬性
- 11. 使用PostgreSQL在JSON中處理null或缺少的屬性
- 12. R gbm處理缺失值
- 13. 使用默認值SQLAlchemy批量插入缺失值
- 14. 處理樸素貝葉斯分類器中的缺失屬性
- 15. Xcode中的NSManagedObject屬性的默認值
- 16. 的默認值在Rails的屬性
- 17. JSF - * .taglib.xml - 屬性默認值
- 18. .NET默認值屬性
- 19. JAXB默認屬性值
- 20. MongoDB。缺少在屬性名
- 21. 如何在xml中使用模式屬性的默認值?
- 22. 由Drupal 7處理的屬性默認用戶登錄過程
- 23. JsonConvert.SerializeObject中的默認雙值處理
- 24. Ant中屬性的默認值
- 25. 設置默認值的屬性在C#
- 26. 在Mongoose /節點中保存一個對象(使用默認值)
- 27. 缺少用戶默認值
- 28. 在swift中,當一個屬性沒有默認值時,其他屬性保留的默認值變得無用?
- 29. MongoDB :: setWriteConcern默認值?
- 30. 使用ExpressJS/Mongoose更新MongoDB中的值
這是缺少/ null時的問題嗎?如果是這樣,爲什麼? –
好吧,如果沒有處理,訪問一個屬性例如obj ['someProperty']將會拋出一個錯誤。 – mrlarssen
顯然。如果它真的困擾你在FE和BE書寫檢查,我會使用默認值... –