Skip to content

Latest commit

 

History

History
222 lines (169 loc) · 11.2 KB

validacion-del-esquema.md

File metadata and controls

222 lines (169 loc) · 11.2 KB

Validación del Esquema

MongoDB proporciona la capacidad de realizar la validación del esquema durante las actualizaciones y las inserciones.

Especificar reglas de validación

Las reglas de validación se basan en cada colección.

Para especificar reglas de validación al crear una nueva colección, úsela db.createCollection()con la validatoropción.

Para agregar validación de documentos a una colección existente, use el collModcomando con la validatoropción.

MongoDB también proporciona las siguientes opciones relacionadas:

  • validationLevel opción, que determina qué tan estrictamente aplica MongoDB las reglas de validación a los documentos existentes durante una actualización, y
  • validationAction, que determina si MongoDB debe errorrechazar y rechazar los documentos que violan las reglas de validación o warnsobre las violaciones en el registro pero permiten documentos no válidos.

Esquema JSON

Nuevo en la versión 3.6 .

A partir de la versión 3.6, MongoDB admite la validación de esquemas JSON. Para especificar la validación del esquema JSON, use el $jsonSchemaoperador en su validatorexpresión.NOTA

JSON Schema es el medio recomendado para realizar la validación del esquema.

Por ejemplo, el siguiente ejemplo especifica las reglas de validación mediante el esquema JSON:

db.createCollection("students", {
   validator: {
      $jsonSchema: {
         bsonType: "object",
         required: [ "name", "year", "major", "address" ],
         properties: {
            name: {
               bsonType: "string",
               description: "must be a string and is required"
            },
            year: {
               bsonType: "int",
               minimum: 2017,
               maximum: 3017,
               description: "must be an integer in [ 2017, 3017 ] and is required"
            },
            major: {
               enum: [ "Math", "English", "Computer Science", "History", null ],
               description: "can only be one of the enum values and is required"
            },
            gpa: {
               bsonType: [ "double" ],
               description: "must be a double if the field exists"
            },
            address: {
               bsonType: "object",
               required: [ "city" ],
               properties: {
                  street: {
                     bsonType: "string",
                     description: "must be a string if the field exists"
                  },
                  city: {
                     bsonType: "string",
                     description: "must be a string and is required"
                  }
               }
            }
         }
      }
   }
})

Para obtener más información, consulte $jsonSchema.

Otras expresiones de consulta

Además de la validación del esquema JSON que utiliza el $jsonSchemaoperador de consulta, MongoDB admite la validación con otros operadores de consulta , con la excepción de:

Por ejemplo, el siguiente ejemplo especifica las reglas del validador mediante la expresión de consulta:

db.createCollection( "contacts",
   { validator: { $or:
      [
         { phone: { $type: "string" } },
         { email: { $regex: /@mongodb\.com$/ } },
         { status: { $in: [ "Unknown", "Incomplete" ] } }
      ]
   }
} )

CONSEJO

operadores de consulta

Comportamiento

La validación se produce durante las actualizaciones y las inserciones. Cuando agrega validación a una colección, los documentos existentes no se someten a controles de validación hasta que se modifican.

Documentos existentes

La validationLevelopción determina qué operaciones MongoDB aplica las reglas de validación:

  • Si validationLeveles strict(el valor predeterminado), MongoDB aplica reglas de validación a todas las inserciones y actualizaciones.
  • Si validationLeveles así moderate, MongoDB aplica reglas de validación a inserciones y actualizaciones de documentos existentes que ya cumplen con los criterios de validación. Con el moderatenivel, no se comprueba la validez de las actualizaciones de los documentos existentes que no cumplen los criterios de validación.

Por ejemplo, cree una contactscolección con los siguientes documentos:

db.contacts.insert([
   { "_id": 1, "name": "Anne", "phone": "+1 555 123 456", "city": "London", "status": "Complete" },
   { "_id": 2, "name": "Ivan", "city": "Vancouver" }
])

Emita el siguiente comando para agregar un validador a la contacts colección:

db.runCommand( {
   collMod: "contacts",
   validator: { $jsonSchema: {
      bsonType: "object",
      required: [ "phone", "name" ],
      properties: {
         phone: {
            bsonType: "string",
            description: "must be a string and is required"
         },
         name: {
            bsonType: "string",
            description: "must be a string and is required"
         }
      }
   } },
   validationLevel: "moderate"
} )

La contactscolección ahora tiene un validador con moderate validationLevel:

  • Si intentó actualizar el documento con _idde 1, MongoDB aplicaría las reglas de validación ya que el documento existente coincide con los criterios.
  • Por el contrario, MongoDB no se aplicará reglas de validación a las actualizaciones al documento con el _iddel 2ya que no cumple con las reglas de validación.

Para desactivar la validación del todo, se puede establecer validationLevela off.

Aceptar o rechazar documentos no válidos

La validationActionopción determina cómo MongoDB maneja los documentos que violan las reglas de validación:

  • Si validationActiones error(el valor predeterminado), MongoDB rechaza cualquier inserción o actualización que viole los criterios de validación.
  • Si validationActiones así warn, MongoDB registra cualquier infracción pero permite que continúe la inserción o actualización.

Por ejemplo, cree una contacts2colección con el siguiente validador de esquema JSON:

db.createCollection( "contacts2", {
   validator: { $jsonSchema: {
      bsonType: "object",
      required: [ "phone" ],
      properties: {
         phone: {
            bsonType: "string",
            description: "must be a string and is required"
         },
         email: {
            bsonType : "string",
            pattern : "@mongodb\.com$",
            description: "must be a string and match the regular expression pattern"
         },
         status: {
            enum: [ "Unknown", "Incomplete" ],
            description: "can only be one of the enum values"
         }
      }
   } },
   validationAction: "warn"
} )

Con el warn validationAction, MongoDB registra cualquier infracción, pero permite que continúe la inserción o actualización.

Por ejemplo, la siguiente operación de inserción viola la regla de validación:

db.contacts2.insert( { name: "Amanda", status: "Updated" } )

Sin embargo, dado que validationActiones warnsolo, MongoDB solo registra el mensaje de violación de validación y permite que la operación continúe:

2017-12-01T12:31:23.738-05:00 W STORAGE  [conn1] Document would fail validation collection: example.contacts2 doc: { _id: ObjectId('5a2191ebacbbfc2bdc4dcffc'), name: "Amanda", status: "Updated" }

Restricciones

No se puede especificar un validador para las colecciones en las admin, localy configlas bases de datos.

No puede especificar un validador para system.*colecciones.

Omitir la validación de documentos

Los usuarios pueden omitir la validación de documentos usando la bypassDocumentValidationopción.

Los siguientes comandos pueden omitir la validación por operación usando la nueva opción bypassDocumentValidation:

Para las implementaciones que han habilitado el control de acceso, para evitar la validación de documentos, el usuario autenticado debe tener bypassDocumentValidationacción. Los roles incorporados dbAdminy restoreproporcionan esta acción.