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 su esquema JSON. La palabra clave enum significa "enumerar" y se utiliza para listar los posibles valores de un campo.
Pasos
Considere una empresa de ropa que solo envía productos a Francia, Reino Unido y Estados Unidos. En el validador, puede indicar los valores de país permitidos y rechazar documentos que especifiquen un país diferente.
Crea una colección con validación que contenga enum.
Cree una shipping colección y utilice el $jsonSchema operador para establecer reglas de validación del 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, que no está en la lista de valores permitidos.
db.shipping.insertOne( { item: "sweater", size: "medium", country: "Germany" } )
La operación devuelve este 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' } ] } ] } ] } }