【发布时间】:2019-11-21 12:52:22
【问题描述】:
我正在使用使用 JSON 模式验证的 Mongodb 的 oneOf 验证器。据我所知,MongoDb 支持 Draft 4 of Schema Validation 并且我使用的验证规则在 this online validator
中显示为有效
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"additionalProperties": false,
"properties": {
"foo": {},
"bar": {}
},
"oneOf": [
{
"type": "object",
"properties": {
"foo": {}
},
"additionalProperties": false
},
{
"type": "object",
"properties": {
"bar": {}
},
"additionalProperties": false
}
]
}
我传递的输入文件是
{
"bar": {},
}
当我在 Mongo 中使用相同的模式验证并传入具有属性 foo 或属性 bar 的对象时,为什么会失败?
{
$jsonSchema: {
bsonType: 'object',
additionalProperties: false,
properties: {
foo: {
bsonType: 'string'
},
bar: {
bsonType: 'string'
}
},
oneOf: [
{
bsonType: 'object',
properties: {
foo: {
bsonType: 'string'
}
},
additionalProperties: false
},
{
bsonType: 'object',
properties: {
bar: {
bsonType: 'string'
}
},
additionalProperties: false
}
]
}
}
db.dmt2.insert({"bar": ""})
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 121,
"errmsg" : "Document failed validation"
}
})
【问题讨论】:
-
错误代码是否列在 mongodb 文档的任何地方?
-
错误代码是代码 121,这是吐出的默认错误。它对调试不是很有用,不得不求助于逐个字段添加并以这种方式进行测试,这比必要的时间要长(在我看来)。
-
Mongo 的产品开发软件中还有一张票 (jira.mongodb.org/browse/SERVER-20547),它是在 4 年前创建的。这似乎在不久的将来无法解决......
-
哎呀。感谢您的提醒。使用 JSON Schema 2019-09,我们定义了一组标准的输出结构。我可以理解他们不愿意实施一些可能有用也可能没用的东西。我们尚未就 JSON Schema 与 MongoDB 展开讨论 =/
-
当然,没有问题!这是我会看的东西,谢谢。即使他们允许描述字段,它也可能会省去很多麻烦(甚至最后的 cmets 都这么说)。
标签: json jsonschema json-schema-validator