首页 >web前端 >js教程 >JSON模式验证和表达查询语法3.6

JSON模式验证和表达查询语法3.6

William Shakespeare
William Shakespeare原创
2025-02-15 12:52:11563浏览

JSON Schema Validation & Expressive Query Syntax in MongoDB 3.6

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn