MongoDB 3.6 的关键改进:JSON Schema 验证与高效查询语法
MongoDB 3.6 通过引入 JSON Schema 验证,显着增强了数据完整性和控制能力。与之前的文档验证相比,JSON Schema 验证更加强大灵活,支持在数组内部强制执行模式,并限制未经授权的属性。
JSON Schema 验证的核心优势:
$jsonSchema
运算符: 允许对属性进行详细规范,例如类型、必填状态和附加属性,从而防止插入拼写错误或未经授权的属性的文档。 lineitems
数组包含必需字段,并遵守指定的数据类型和约束。 从文档验证迁移到 JSON Schema 验证
以下示例展示了如何将文档验证升级为 JSON Schema 验证:
首先,创建一个 orders
集合,并使用文档验证配置:
<code class="language-javascript">db.createCollection("orders", { validator: { item: { $type: "string" }, price: { $type: "decimal" } } });</code>
这确保 item
是字符串,price
是十进制数。然而,它无法阻止添加拼写错误或未授权的属性。
使用 $jsonSchema
运算符可以解决这个问题:
<code class="language-javascript">db.runCommand({ collMod: "orders", validator: { $jsonSchema: { bsonType: "object", required: ["item", "price"], properties: { item: { bsonType: "string" }, price: { bsonType: "decimal" } } } } });</code>
通过 additionalProperties: false
可以进一步增强安全性,防止添加未定义的属性。
处理复杂数据结构 (例如:lineitems
数组)
JSON Schema 验证允许对文档内的复杂结构进行验证,例如确保 lineitems
数组中的每个元素都包含必需字段并符合指定的数据类型和约束。 示例如下:
<code class="language-javascript">// ... (省略部分代码,与原文类似) ... lineitems: { bsonType: ["array"], minItems: 1, maxItems: 10, items: { required: ["unit_price", "sku", "quantity"], bsonType: "object", additionalProperties: false, // ... (省略部分代码,与原文类似) ... } } // ... (省略部分代码,与原文类似) ...</code>
利用高效查询语法进行更复杂的业务规则验证
高效的查询语法允许使用 $expr
运算符来创建动态验证规则,例如验证 totalWithVAT
是否等于 total * (1 VAT)
:
<code class="language-javascript">$expr: { $eq: [ "$totalWithVAT", { $multiply: ["$total", { $sum: [1, "$VAT"] }] } ] }</code>
通过结合 $jsonSchema
和 $expr
,可以将复杂的业务逻辑规则集成到数据库验证中,提高数据准确性和一致性。
总结
MongoDB 3.6 的 JSON Schema 验证和高效查询语法为开发者提供了更强大的数据完整性和控制能力,同时简化了应用程序代码,减少了错误,并提高了数据处理效率。 这使得 MongoDB 更加适合处理大型、复杂的应用程序和数据。
以上是JSON模式验证和表达查询语法3.6的详细内容。更多信息请关注PHP中文网其他相关文章!