{test:"123"} falha na validação porque não está em conformidade com nenhum dos esquemas em anyOf , que precisam de test1 ou test2 como a única chave. anyOf aplica cada subesquema à sua instância e declara válido se pelo menos um dos subesquemas passar na validação. {test1: "123" } falha porque os esquemas raiz additionalProperties: false impede quaisquer chaves em seu objeto não definidas no MESMO objeto de esquema properties ou patternProperties . A solução é ter alguma duplicação.
In THIS exemplo (o link é para o teste do navegador, mas apenas draft-7), adicionei propriedades raiz
test1 e test2 . Isso permitirá dados onde você tem uma chave de test1 ou test2 para passar, mas como não conheço seus requisitos, não posso dizer como modificar o esquema para permitir um objeto com uma chave de test passar (como cada um dos anyOf subesquemas o impedem). {
"type": "object",
"additionalProperties": false,
"properties": {
"_id": {},
"test": {},
"test1": {},
"test2": {}
},
"anyOf": [
{
"type": "object",
"properties": {
"test1": {}
},
"additionalProperties": false
},
{
"type": "object",
"properties": {
"test2": {}
},
"additionalProperties": false
}
]
}
Se sua intenção é verificar se uma das coisas que você está inserindo tem
test1 ou test2 , temo que o JSON Schema não possa ajudá-lo. O esquema JSON no contexto do Mongo só pode verificar cada item individualmente e não tem a capacidade de validar uma coleção de registros potencialmente inseridos. No esquema de exemplo acima, removi a verificação de tipo porque isso não é relevante para esta pergunta, e bsonType difere do tipo de esquema JSON de qualquer maneira.