You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过MongoDB .NET驱动创建集合时指定JSON Schema验证?

使用MongoDB .NET驱动通过JSON Schema创建带验证的集合

当然可以!MongoDB .NET驱动完全支持用JSON Schema来指定集合的验证规则,这可比手动构建冗长的FilterDefinition清爽多了。下面给你两种实用的实现方式:

方式一:直接用JSON Schema字符串

如果你已经有写好的JSON Schema(比如从其他地方复用,或者用可视化工具生成的),直接把它解析成BsonDocument就能当作验证器使用,同时记得配置验证的级别和动作,确保规则生效。

示例代码

// 预先定义好的JSON Schema(针对Foo集合的规则)
string fooSchema = @"
{
  ""$jsonSchema"": {
    ""bsonType"": ""object"",
    ""required"": [""Name"", ""Age""],
    ""properties"": {
      ""Name"": {
        ""bsonType"": ""string"",
        ""description"": ""必须是非空字符串""
      },
      ""Age"": {
        ""bsonType"": ""int"",
        ""minimum"": 18,
        ""description"": ""年龄必须大于等于18""
      }
    }
  }
}";

// 把JSON Schema解析为BsonDocument
var validatorDocument = BsonDocument.Parse(fooSchema);

// 配置集合创建选项
var createOptions = new CreateCollectionOptions<Foo>
{
    Validator = new BsonDocumentFilterDefinition<Foo>(validatorDocument),
    ValidationLevel = ValidationLevel.Strict, // 严格验证所有写入操作
    ValidationAction = ValidationAction.Error // 验证失败时直接抛出异常阻止操作
};

// 创建带验证的集合
await db.CreateCollectionAsync("Foos", createOptions);

方式二:用驱动的JsonSchemaBuilder构建(强类型友好)

如果你不想写纯JSON字符串,也可以用驱动自带的JsonSchemaBuilder来构建Schema,这样能获得IDE的强类型提示,不容易写错:

示例代码

// 用JsonSchemaBuilder构建验证规则
var fooSchema = new JsonSchemaBuilder()
    .BsonType(ObjectType.Object)
    .Required("Name", "Age")
    .Properties(
        props => props.Add("Name", new JsonSchemaBuilder().BsonType(StringType.String).Description("必须是非空字符串")),
        props => props.Add("Age", new JsonSchemaBuilder().BsonType(Int32Type.Int32).Minimum(18).Description("年龄必须≥18"))
    );

// 配置集合选项
var createOptions = new CreateCollectionOptions<Foo>
{
    Validator = new JsonSchemaFilterDefinition<Foo>(fooSchema),
    ValidationLevel = ValidationLevel.Strict,
    ValidationAction = ValidationAction.Error
};

// 创建集合
await db.CreateCollectionAsync("Foos", createOptions);

几个关键配置说明

  • ValidationLevel:控制验证的严格度,Strict会验证所有插入/更新操作;Moderate只验证修改了Schema中指定字段的操作。
  • ValidationAction:设置验证失败后的行为,Error会抛出异常阻止操作;Warn只会记录警告,但允许操作继续。

这样就能用更简洁、易维护的JSON Schema来替代冗长的FilterDefinition代码啦~

内容的提问来源于stack exchange,提问作者mortb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:57:10