Los valores predeterminados realmente no funcionan con matrices, a menos que, por supuesto, sea un documento dentro de la matriz y desee establecer una propiedad predeterminada para ese documento cuando se agregue a la matriz.
Por lo tanto, una matriz siempre se inicializa como "vacía", a menos que, por supuesto, coloque algo deliberadamente en ella. Para hacer lo que desea lograr, agregue un enlace de guardado previo que verifique si hay una matriz vacía y luego coloque un valor predeterminado allí:
var async = require('async'),
mongoose = require('mongoose'),
Schema = mongoose.Schema;
mongoose.connect('mongodb://localhost/authtest');
var userSchema = new Schema({
permissions:[{
"type": String,
"enum": ["Delete","Show","Create","Update"],
}]
});
userSchema.pre("save",function(next) {
if (this.permissions.length == 0)
this.permissions.push("Show");
next();
});
var User = mongoose.model( 'User', userSchema );
var user = new User();
user.save(function(err,user) {
if (err) throw err;
console.log(user);
});
Lo que crea el valor donde está vacío:
{ __v: 0,
_id: 55c2e3142ac7b30d062f9c38,
permissions: [ 'Show' ] }
Si, por supuesto, inicializa sus datos o los manipula para crear una entrada en la matriz:
var user = new User({"permissions":["Create"]});
Luego obtienes la matriz que agregaste:
{ __v: 0,
_id: 55c2e409ec7c812b06fb511d,
permissions: [ 'Create' ] }
Y si quisiera "siempre" tener "Mostrar" presente en los permisos, entonces un cambio similar al gancho podría aplicarlo para usted:
userSchema.pre("save",function(next) {
if (this.permissions.indexOf("Show") == -1)
this.permissions.push("Show");
next();
});
Lo que resulta en:
var user = new User({"permissions":["Create"]});
{ __v: 0,
_id: 55c2e5052219b44e0648dfea,
permissions: [ 'Create', 'Show' ] }
Esas son las formas en que puede controlar los valores predeterminados en las entradas de su matriz sin necesidad de asignarlos explícitamente en su código usando el modelo.