驗證插入或更新到MongoDB的數據的最佳方式是什麼?是否要編寫某種執行驗證的服務器執行的JavaScript代碼?在mongo中驗證數據的最佳方法是什麼?
回答
我認爲你的應用程序處理這種事情是正常的。如果數據以某種方式無效,請不要讓它被添加到數據存儲區,直到用戶更正了您檢測到的任何錯誤。
MongoDB沒有約束或觸發器,所以應用程序必須驗證數據。
如果存在無效數據,您也可以編寫每天檢查一次或更多的Javascript腳本。您可以使用它來檢查應用程序業務邏輯的質量。
我剛剛開始在基於Zend Framework的應用程序中使用MongoDB和PHP。
我爲每個MongoDB集合創建了1個對象(例如,User.php映射到用戶集合)。每個對象都知道它映射到哪個集合,以及需要哪些字段。它也知道哪些過濾器(Zend_Filter_Input)和驗證器(Zend_Validate)應該應用於每個字段。在執行MongoDB insert()或save()之前,我運行$ object-> isValid(),它執行所有驗證器。如果他們全部通過isValid()將返回true,然後繼續運行insert()或save(),否則我會顯示錯誤。
從2.4開始,MongoDB在寫入MongoDB數據文件時爲mongod和mongorestore啓用基本的BSON對象驗證。這可以防止任何客戶端將無效或格式錯誤的BSON插入到MongoDB數據庫中。 源:http://docs.mongodb.org/manual/release-notes/2.4/
從的MongoDB 3.2開始它們加入document validation(slides)。
您可以爲每個集合指定驗證規則,使用幾乎所有的Mongo的查詢操作使用validator選項(除$geoNear
,$near
,$nearSphere
,$text
和$where
)。
要創建一個新的集合與驗證,使用方法:
db.createCollection("your_coll", {
validator: { `your validation query` }
})
要驗證程序添加到現有的集合,你可以添加驗證:
db.createCollection("your_coll", {
validator: { `your validation query` }
})
驗證只有在插入工作/更新,因此當您在舊集合上創建驗證器時,以前的數據將不會被驗證(您可以編寫以前數據的應用程序級驗證)。您還可以指定validationLevel和validationAction來告訴如果文檔無法通過驗證會發生什麼情況。
如果您嘗試插入/更新的東西,失敗的驗證,(並沒有指定任何異樣validationLevel /動作)的文件,那麼你將得到一個錯誤的writeResult
(可悲的是,誤差不告訴你什麼失敗而你得到的只是默認validation failed
):
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 121,
"errmsg" : "Document failed validation"
}
})
- 1. 在jQuery驗證中使用ajaxform的最佳方法是什麼?
- 2. 未驗證數據的最佳方式是什麼?
- 3. 構建驗證器函數的最佳方法是什麼? PHP
- 4. 在JSP中驗證參數的最佳做法是什麼?
- 5. 驗證C#中readline輸入的最佳方法是什麼?
- 6. 什麼是覆蓋mvc應用程序中數據驗證的最佳方法
- 7. 在WPF中處理驗證的最佳方式是什麼?
- 8. 哪一個是驗證JTextField中數據的最佳方法?
- 9. 驗證用戶輸入JDBC的最佳方法是什麼?
- 10. 處理年齡驗證的最佳方法是什麼?
- 11. 驗證值列表的最佳方法是什麼?
- 12. 驗證上傳表單的最佳方法是什麼?
- 13. 驗證貨幣輸入的最佳方法是什麼?
- 14. 什麼是驗證輸入字段的最佳方法?
- 15. 在數據庫中存儲IP的最佳方法是什麼?
- 16. 在php中連接數據庫的最佳方法是什麼?
- 17. 在Mongo中組織子文檔的最佳方式是什麼?
- 18. 在Mongo中存儲/查詢`last_read`的最佳方式是什麼?
- 19. 在Mongo的數據上運行Map/Reduce的最佳方式是什麼?
- 20. 在單元測試中驗證Set值的最佳方法是什麼?
- 21. 在JAVA中驗證多個字段的最佳方法是什麼?
- 22. 什麼是在Mongo上執行大數據查詢的最佳方式?
- 23. 什麼數據驗證方法最適合於大數據集
- 24. 在iOS 7應用程序中驗證表單時,最佳方法是什麼?
- 25. 處理失敗的nonce驗證的最佳方式是什麼?
- 26. 在PHP中驗證URL最安全的方法是什麼?
- 27. 在ADO.Net數據服務中使用.SaveChanges()方法的最佳方法是什麼?
- 28. 什麼是使用Java中的ENUMS驗證值組合的最佳方法?
- 29. 驗證網上大量上傳字段數據的最佳做法是什麼?
- 30. 什麼是驗證輸入(Skeleton + Vue.js)的最佳方式?
[蒙戈3.2(http://stackoverflow.com/a/33602507/1090562)將有驗證。 – 2015-11-09 04:24:45