Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

Especifique valores de campo permitidos

Nesta página

  • Contexto
  • Passos

Ao criar um JSON schema, você pode especificar quais valores são permitidos em um determinado campo. Use essa funcionalidade para garantir que os valores de seu campo pertençam a um conjunto esperado de valores, como uma lista de países. Da mesma forma, você pode usar essa funcionalidade para evitar erros humanos, como erros de digitação, ao inserir dados em uma collection.

Para especificar uma lista de valores permitidos, utilize a palavra-chave enum no seu JSON schema. A palavra-chave enum significa "enumerar" e é usada para listar possíveis valores de um campo.

Considere uma empresa de vestuário que só envia produtos para França, Reino Unido e Estados Unidos. No validador, você pode listar os valores de país permitidos e rejeitar documentos que especificam um país diferente.

1

Crie uma coleção shipping e use o operador $jsonSchema para definir regras de validação de esquema:

db.createCollection("shipping", {
validator: {
$jsonSchema: {
bsonType: "object",
title: "Shipping Country Validation",
properties: {
country: {
enum: [ "France", "United Kingdom", "United States" ],
description: "Must be either France, United Kingdom, or United States"
}
}
}
}
} )

O campo enum no objeto country permite apenas documentos onde o campo country é France, United Kingdom ou United States.

2

A seguinte operação de inserção falha porque country é Germany, que não está na lista de valores permitidos.

db.shipping.insertOne( {
item: "sweater",
size: "medium",
country: "Germany"
} )

A operação retorna este erro:

MongoServerError: Document failed validation
Additional information: {
failingDocumentId: ObjectId("630d1057931191850b40d0aa"),
details: {
operatorName: '$jsonSchema',
title: 'Shipping Country Validation',
schemaRulesNotSatisfied: [
{
operatorName: 'properties',
propertiesNotSatisfied: [
{
propertyName: 'country',
description: 'Must be either France, United Kingdom, or United States',
details: [
{
operatorName: 'enum',
specifiedAs: {
enum: [ 'France', 'United Kingdom', 'United States' ]
},
reason: 'value was not found in enum',
consideredValue: 'Germany'
}
]
}
]
}
]
}
}
3

A inserção é bem-sucedida após você alterar o campo country para um dos valores permitidos:

db.shipping.insertOne( {
item: "sweater",
size: "medium",
country: "France"
} )
4

Para confirmar que o documento foi inserido com sucesso, consulte a coleção shipping:

db.shipping.find()

O MongoDB retorna o documento:

[
{
_id: ObjectId("630d10d5931191850b40d0ab"),
item: 'sweater',
size: 'medium',
country: 'France'
}
]

Voltar

Specify JSON Validation

Nesta página