Estoy usando la validación de documentos en MongoDB, que se supone que valida los tipos de datos de los atributos de los documentos que inserto en la colección de users . Aquí están los comandos que he ejecutado exactamente en la misma secuencia
> db.createCollection("users"); { "ok" : 1 } > db.runCommand({ ... collMod: "users", ... validator: { ... $and : [ ... { "nm" : { $type : "string" }}, ... { "mob" : { $type : "int" }}, ... ] ... }, ... validationAction: "error", ... validationLevel: "strict" ... }); { "ok" : 1 } > db.users.insertOne( { ... "nm" : "foo", ... "eml" : "foo@gmail.com", ... "mob" : 12345, ... "isa" : true, ... "blod" : "O+", ... "sid" : 1, ... "cid" : 1, ... "aid" : 1, ... "add" : "bar", ... "dob" : "16-Sep-1992" ...}); Pero tan pronto como ejecuto el último comando insertOne , falla la validación del documento e imprime el siguiente resultado.
2017-01-04T18:27:16.824+0530 E QUERY [main] WriteError: Document failed validation : WriteError({ "index" : 0, "code" : 121, "errmsg" : "Document failed validation", "op" : { "_id" : ObjectId("586cf12c5a37c6beeeb15940"), "nm" : "foo", "eml" : "foo@gmail.com", "mob" : 12345, "isa" : true, "blod" : "O+", "sid" : 1, "cid" : 1, "aid" : 1, "add" : "bar", "dob" : "16-Sep-1992" } }); WriteError@src/mongo/shell/bulk_api.js:469:48 Bulk/mergeBatchResults@src/mongo/shell/bulk_api.js:836:49 Bulk/executeBatch@src/mongo/shell/bulk_api.js:906:13 Bulk/this.execute@src/mongo/shell/bulk_api.js:1150:21 DBCollection.prototype.insertOne@src/mongo/shell/crud_api.js:242:9 @(shell):1:1Estoy tratando de averiguar qué pasa si es el problema con mi validador o los datos que estoy insertando pero no pude. Cualquier ayuda sería apreciada.
use "number" en lugar de "int" en la validación de su documento:
correr
db.runCommand({ collMod:"users", validator:{ $and:[ { "nm":{ $type:"string" } }, { "mob":{ $type:"number" } }, ] }, validationAction:"error", validationLevel:"strict" })y debería funcionar bien