En algunas situaciones, es posible que debas omitir las reglas de validación de esquema de una colección. Por ejemplo, si está restaurando datos potencialmente no válidos de una copia de seguridad a una colección que tiene reglas de validación. En este escenario, los documentos antiguos pueden no cumplir con los nuevos requisitos de validación.
Context
La omisión de la validación del esquema se realiza por operación. Si omite la validación del esquema para insertar un documento no válido, cualquier actualización futura del documento no válido deberá:
También omitir la validación del esquema
Resulta en un documento válido
Operaciones compatibles
Puedes utilizar los siguientes comandos y métodos para omitir la validación en cada operación:
applyOpsComandofindAndModifycomando ydb.collection.findAndModify()métodomapReducecomando ydb.collection.mapReduce()métodoinsertComandoupdateComando$outy$mergeetapas para el comandoaggregatey el métododb.collection.aggregate()
Requisito previo
Para implementaciones que han activado el control de acceso, para omitir la validación de documentos, el usuario autenticado debe tener la acción bypassDocumentValidation. Los roles integrados dbAdmin y restore proporcionan esta acción.
Pasos
El siguiente ejemplo crea una colección con validación de esquemas y luego inserta un documento no válido al omitir las reglas de validación.
Crear una colección con reglas de validación
Crea una colección students y usa el operador $jsonSchema para establecer reglas de validación de esquema:
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" } } } } } )
Ignora la validación para insertar un documento inválido
El documento siguiente no es válido porque el campo year está fuera de los límites permitidos (2017-3017):
{ name: "Alice", year: Int32( 2016 ), major: "History", gpa: Double(3.0), address: { city: "NYC", street: "33rd Street" } }
Para omitir las reglas de validación e insertar el documento no válido, ejecute el siguiente comando insert, que establece la opción bypassDocumentValidation en true:
db.runCommand( { insert: "students", documents: [ { name: "Alice", year: Int32( 2016 ), major: "History", gpa: Double(3.0), address: { city: "NYC", street: "33rd Street" } } ], bypassDocumentValidation: true } )
Resultados
Para confirmar que el documento se insertó correctamente, query la colección students:
db.students.find()
MongoDB devuelve el documento insertado:
[ { _id: ObjectId("62bcb4db3f7991ea4fc6830e"), name: 'Alice', year: 2016, major: 'History', gpa: 3, address: { city: 'NYC', street: '33rd Street' } } ]