MongoDB 3.6 的關鍵改進:JSON Schema 驗證與高效查詢語法
MongoDB 3.6 通過引入 JSON Schema 驗證,顯著增強了數據完整性和控制能力。與之前的文檔驗證相比,JSON Schema 驗證更加強大靈活,支持在數組內部強制執行模式,並限制未經授權的屬性。
JSON Schema 驗證的核心優勢:
$jsonSchema
運算符: 允許對屬性進行詳細規範,例如類型、必填狀態和附加屬性,從而防止插入拼寫錯誤或未經授權的屬性的文檔。 lineitems
數組包含必需字段,並遵守指定的數據類型和約束。 從文檔驗證遷移到 JSON Schema 驗證
以下示例展示瞭如何將文檔驗證升級為 JSON Schema 驗證:
首先,創建一個 orders
集合,並使用文檔驗證配置:
db.createCollection("orders", { validator: { item: { $type: "string" }, price: { $type: "decimal" } } });
這確保 item
是字符串,price
是十進制數。然而,它無法阻止添加拼寫錯誤或未授權的屬性。
使用 $jsonSchema
運算符可以解決這個問題:
db.runCommand({ collMod: "orders", validator: { $jsonSchema: { bsonType: "object", required: ["item", "price"], properties: { item: { bsonType: "string" }, price: { bsonType: "decimal" } } } } });
通過 additionalProperties: false
可以進一步增強安全性,防止添加未定義的屬性。
處理複雜數據結構 (例如:lineitems
數組)
JSON Schema 驗證允許對文檔內的複雜結構進行驗證,例如確保 lineitems
數組中的每個元素都包含必需字段並符合指定的數據類型和約束。 示例如下:
// ... (省略部分代码,与原文类似) ... lineitems: { bsonType: ["array"], minItems: 1, maxItems: 10, items: { required: ["unit_price", "sku", "quantity"], bsonType: "object", additionalProperties: false, // ... (省略部分代码,与原文类似) ... } } // ... (省略部分代码,与原文类似) ...
利用高效查詢語法進行更複雜的業務規則驗證
高效的查詢語法允許使用 $expr
運算符來創建動態驗證規則,例如驗證 totalWithVAT
是否等於 total * (1 VAT)
:
$expr: { $eq: [ "$totalWithVAT", { $multiply: ["$total", { $sum: [1, "$VAT"] }] } ] }
通過結合 $jsonSchema
和 $expr
,可以將復雜的業務邏輯規則集成到數據庫驗證中,提高數據準確性和一致性。
總結
MongoDB 3.6 的 JSON Schema 驗證和高效查詢語法為開發者提供了更強大的數據完整性和控制能力,同時簡化了應用程序代碼,減少了錯誤,並提高了數據處理效率。 這使得 MongoDB 更加適合處理大型、複雜的應用程序和數據。
以上是JSON模式驗證和表達查詢語法3.6的詳細內容。更多資訊請關注PHP中文網其他相關文章!