Cómo establecer el límite para el tamaño de la matriz en el esquema Mongoose

¿Podría decirme si hay alguna manera de establecer una limitación en el tamaño de la matriz al crear un esquema de Mongoose? Por ejemplo

var peopleSchema = new Schema({ name: { type: String, required: true, default: true }, /* here I want to have limit: no more than 10 friends. Is it possible to define in schema?*/ friends: [{ type: Schema.Types.ObjectId, ref: 'peopleModel' }] }) 

Con un pequeño ajuste en la configuración del esquema, puede agregar una opción de validación :

 var peopleSchema = new Schema({ name: { type: String, required: true, default: true }, friends: { type: [{ type: Schema.Types.ObjectId, ref: 'peopleModel' }], validate: [arrayLimit, '{PATH} exceeds the limit of 10'] } }); function arrayLimit(val) { return val.length <= 10; } 

a partir de mongo 3.6 puede agregar validación para una recostackción al final del servidor, cada documento insertado / actualizado se validará con el validador $ jsonSchema , solo se inserta el válido, el error de validación será para documentos no válidos

 db.createCollection("people", { validator: { $jsonSchema: { bsonType: "object", required: [ "name" ], properties: { name: { bsonType: ["string"], description: "must be a string" }, friends: { bsonType: ["array"], items : { bsonType: ["string"] }, minItems: 0, maxItems: 10, description: "must be a array of string and max is 10" } } } } }); 

colección

 > db.people.find() 

documento válido

 > db.people.insert({name: 'abc' , friends : ['1','2','3','4','5','6','7','8','9','10']}) WriteResult({ "nInserted" : 1 }) 

documento inválido

 > db.people.insert({name: 'def' , friends : ['1','2','3','4','5','6','7','8','9','10', '11']}) WriteResult({ "nInserted" : 0, "writeError" : { "code" : 121, "errmsg" : "Document failed validation" } }) 

encontrar

 > db.people.find() { "_id" : ObjectId("5a9779b60546616d5377ec1c"), "name" : "abc", "friends" : [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ] } >