En algunas situaciones, puede que necesite omitir las reglas de validación del esquema de una colección. Por ejemplo, si está restaurando datos potencialmente no válidos de una copia de seguridad a una colección con reglas de validación. En este caso, es posible que los documentos antiguos no cumplan 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
Resultado en un documento válido
Operaciones compatibles
Puede utilizar los siguientes comandos y métodos para omitir la validación por 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
En las implementaciones con control de acceso habilitado, para omitir la validación de documentos, el usuario autenticado debe tener la acciónbypassDocumentValidation. Los roles integradosdbAdminyrestorepermiten esta acción.
Pasos
El siguiente ejemplo crea una colección con validación de esquema y luego inserta un documento no válido omitiendo las reglas de validación.
Crear una colección con reglas de validación
Cree una students colección y utilice el $jsonSchema operador para establecer reglas de validación del 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" } } } } } )
Omitir la validación para insertar un documento no válido
El siguiente documento 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, consulte 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' } } ]