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

类型无误但JSON Schema验证失败,translations子Schema问题咨询

排查你的Translations Schema验证失败问题

先看你给出的这段Schema定义:

"translations": { 
  "bsonType": "object", 
  "patternProperties": { 
    "id": { "bsonType": "string" }, 
    "^[a-z]{2}$": { "anyOf": [ { "bsonType": "object" }, { "bsonType": "array" } ] } 
  } 
}

结合你说的「类型正确但验证失败」的情况,我梳理了几个最可能的原因:

1. 对patternProperties的用法理解有误

patternProperties的键必须是正则表达式,用来匹配对象的属性名。你写的"id"会被当成正则^id$——也就是说,只有当属性名**完全等于"id"**时,才会应用"bsonType": "string"的校验规则。

如果你的需求是:translations对象必须包含一个名为id的字符串属性,那应该用properties而非patternProperties,同时配合required数组声明必填项,比如:

"translations": {
  "bsonType": "object",
  "properties": {
    "id": { "bsonType": "string" }
  },
  "patternProperties": {
    "^[a-z]{2}$": { "anyOf": [ { "bsonType": "object" }, { "bsonType": "array" } ] }
  },
  "required": ["id"] // 如果id是必填的话
}

2. 未显式设置additionalProperties导致额外属性被拦截

MongoDB的BSON Schema中,当使用patternProperties时,如果没有显式声明additionalProperties,默认行为会拒绝所有不匹配patternProperties规则的属性。

举个例子:如果你的translations对象里有一个属性名是"id_123"(不是正好"id"),或者"en-US"(不符合^[a-z]{2}$的正则),这些属性会因为不匹配任何pattern规则而被判定为无效,哪怕它们的类型是正确的。

如果允许存在其他属性,你需要显式添加"additionalProperties": true:

"translations": {
  "bsonType": "object",
  "patternProperties": {
    "id": { "bsonType": "string" },
    "^[a-z]{2}$": { "anyOf": [ { "bsonType": "object" }, { "bsonType": "array" } ] }
  },
  "additionalProperties": true
}

3. 正则表达式匹配范围不符合实际属性名

你的正则^[a-z]{2}$只匹配两个小写字母的属性名(比如"en"、"fr"),如果你的实际属性名包含大写字母(比如"EN")、长度不是2(比如"eng"),或者带有其他字符(比如"en-GB"),都会不匹配这个规则,导致对应的属性值即使类型正确也会验证失败。

如果需要支持更广泛的语言代码格式,可以调整正则,比如支持大小写:^[a-zA-Z]{2}$,或者支持带地区的格式:^[a-z]{2}(-[A-Z]{2})?$。

4. 可能的隐含校验规则冲突

如果你在父Schema或其他地方对translations设置了额外的校验规则(比如required数组里包含了未定义的属性,或者其他properties规则冲突),也可能导致类型正确但整体验证失败。可以检查一下上层Schema是否有相关约束。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:05:25