Cuando creas un Esquema JSON: permite especificar los valores permitidos en un campo específico. Esta función garantiza que los valores de los campos pertenezcan a un conjunto esperado, como una lista de países. Asimismo, esta función ayuda a evitar errores humanos, como errores tipográficos, al insertar datos en una colección.
Context
Para especificar una lista de valores permitidos, utilice el enum palabra clave en tu JSON schema. La palabra clave enum significa "enumerar" y se utiliza para enumerar los valores posibles de un campo.
Pasos
Imagina una empresa de ropa que solo envía productos a Francia, el Reino Unido y los Estados Unidos. En el validador, puedes enumerar los valores de país permitidos y rechazar los documentos que especifiquen un país diferente.
Crea una colección con validación que contenga enum.
Crea una colección shipping y usa el operador $jsonSchema para establecer reglas de validación 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" } } } } } )
El campo enum en el objeto country solo permite documentos donde el campo country sea France, United
Kingdom o United States.
Confirma que la validación impide documentos no válidos.
La siguiente operación de inserción falla porque country es Germany, lo cual no está en la lista de valores permitidos.
db.shipping.insertOne( { item: "sweater", size: "medium", country: "Germany" } )
La operación devuelve el siguiente error:
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' } ] } ] } ] } }