JSON schema é um vocabulário que permite que você anote e valide documentos JSON. Utilize o JSON schema para especificar regras de validação para seus campos em um formato legível por humanos.
Contexto
O MongoDB suporta rascunho 4 do JSON Schema, incluindo especificação principal e especificação de validação, com algumas diferenças. Para obter detalhes, consulte Extensões e Omissões.
Para mais informações sobre JSON schema, consulte o site oficial.
Restrições
Você não pode especificar a validação de esquema para:
Collections nos bancos de dados
admin,localeconfig
Se você tiver a Client-Side Field Level Encryption ou a Queryable Encryption habilitadas em uma coleção, a validação estará sujeita às seguintes restrições:
Para CSFLE, ao executar o
collMod, a biblioteca libmongocrypt prefere o esquema de criptografia JSON especificado no comando. Essa preferência permite definir um esquema em uma coleção que ainda não tem um.Na Queryable Encryption, qualquer JSON schema que inclua um campo criptografado resulta em um erro de análise de consulta.
Passos
Neste exemplo, você cria uma coleta students com regras de validação e observa os resultados após tentar inserir um documento inválido.
Conecte-se à sua MongoDB deployment.
Para conectar a uma instância local do MongoDB ou implantação do MongoDB Atlas utilizando o mongosh, consulte Conectar a uma implantação ou Conectar via mongosh.
Crie uma coleta com validação.
No mongosh, execute o seguinte comando para criar uma coleção students e use o operador $jsonSchema para definir regras de validação de esquema:
db.createCollection("students", { validator: { $jsonSchema: { bsonType: "object", title: "Student Object Validation", required: [ "address", "major", "name", "year" ], properties: { name: { bsonType: "string", description: "'name' must be a string and is required" }, year: { bsonType: "int", minimum: 2017, maximum: 3017, description: "'year' must be an integer in [ 2017, 3017 ] and is required" }, gpa: { bsonType: [ "double" ], description: "'gpa' must be a double if the field exists" } } } } } )
Dica
Esclareça regras com campos de título e descrição
Use os campos title e description para explicar regras de validação que não são imediatamente claras. Quando um documento falha na validação, o MongoDB inclui esses campos na saída de erro.
Insert a valid document.
Se você alterar o valor do campo gpa para um tipo double, a operação de inserção será bem-sucedida. Execute o seguinte comando para inserir o documento válido:
db.students.insertOne( { name: "Alice", year: Int32( 2019 ), major: "History", gpa: Double( 3.0 ), address: { city: "NYC", street: "33rd Street" } } )
Observação
Se você tentar inserir um documento inválido, o MongoDB retornará um erro.
Consulte o documento válido.
Para confirmar que você inseriu o documento com sucesso, execute o seguinte comando para consultar a collection students:
db.students.find()
[ { _id: ..., name: 'Alice', year: 2019, major: 'History', gpa: 3, address: { city: 'NYC', street: '33rd Street' } } ]
Dica
Se você estiver conectado a uma implantação do Atlas, também poderá visualizar e filtrar o documento na UI do Atlas.
Informações adicionais
Você pode combinar a validação de JSON schema com a validação do operador de query.
Por exemplo, considere uma collection sales com esta validação de esquema:
db.createCollection("sales", { validator: { "$and": [ // Validation with query operators { "$expr": { "$lt": ["$lineItems.discountedPrice", "$lineItems.price"] } }, // Validation with JSON Schema { "$jsonSchema": { "properties": { "items": { "bsonType": "array" } } } } ] } } )
A validação anterior força que os documentos na collection sales sigam estas regras:
lineItems.discountedPricedeve ser menor quelineItems.price. Esta regra utiliza o operador$lt.O campo
itemsdeve ser um array. Esta regra utiliza$jsonSchema.
Saiba mais
Para obter uma lista completa das palavras-chave JSON schema permitidas, consulte Palavras-chave disponíveis.
Para restringir quais valores um determinado campo pode conter, consulte Especificar valores de campo permitidos.
Para evitar problemas com a validação de JSON schema, consulte Dicas para a validação de JSON schema.