He estado tratando de validar mis datos usando los validadores provistos por MongoDB pero me encontré con un problema. Aquí hay un documento de usuario simple que estoy insertando.
{ "name" : "foo", "surname" : "bar", "books" : [ { "name" : "ABC", "no" : 19 }, { "name" : "DEF", "no" : 64 }, { "name" : "GHI", "no" : 245 } ] }Ahora, este es el validador que se ha aplicado para la colección de usuarios. Pero esto ahora funciona para la matriz de libros que estoy insertando junto con el documento. Quiero verificar los elementos dentro del objeto que son los miembros de la matriz de libros. El esquema del objeto no cambiará.
db.runCommand({ collMod: "users", validator: { $or : [ { "name" : { $type : "string" }}, { "surname" : { $type : "string" }}, { "books.name" : { $type : "string" }}, { "books.no" : { $type : "number" }} ], validationLevel: "strict" });Sé que este validador es para objetos miembros y no para matrices, pero ¿cómo valido dicho objeto?
Ha pasado mucho tiempo desde que se hizo esta pregunta.
De todos modos, si es que alguien pasa por esto.
Para MongoDB 3.6 y versiones posteriores, esto se puede lograr usando el validador.
db.createCollection("users", { validator: { $jsonSchema: { bsonType: "object", required: ["name","surname","books"], properties: { name: { bsonType: "string", description: "must be a string and is required" }, surname: { bsonType: "string", description: "must be a string and is required" }, books: { bsonType: [ "array" ], items: { bsonType: "object", required:["name","no"], properties:{ name:{ bsonType: "string", description: "must be a string and is required" }, no:{ bsonType: "number", description: "must be a number and is required" } } }, description: "must be a array of objects containing name and no" } } } } }) Este se encarga de todos sus requisitos.
Para obtener más información, consulte este enlace
Puede hacerlo en 3.6 usando la expresión $jsonSchema .
JsonSchema permite definir un campo como una matriz y especificar restricciones de esquema para todos los elementos, así como restricciones específicas para elementos individuales de la matriz.
Esta publicación de blog tiene una serie de ejemplos que lo ayudarán a descubrir la sintaxis.