我正在使用Mongodb的oneOf验证程序,使用JSON模式验证。据我所知,MongoDb支持模式验证草案4,我使用的验证规则在此在线验证器中显示为有效
{
"$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"
}
})
通过指定_id并将其包含在one Of的两个可能模式中,解决了这个问题。我认为当Mongo添加一个文档时,它插入了它的默认_id,这不是指定模式的一部分,它开始抱怨。
我想重复这个问题来重新确认,但据我记忆所及,这就是问题所在。