Стойностите по подразбиране наистина не работят с масиви, освен ако разбира се не е документ в масива и не искате да зададете свойство по подразбиране за този документ, когато се добави към масива.
Следователно масивът винаги се инициализира като "празен", освен ако, разбира се, умишлено не поставите нещо в него. За да направите това, което искате да постигнете, след това добавете кука за предварително записване, която проверява за празен масив и след това поставя стойност по подразбиране там:
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);
});
Което създава стойността, където е празна:
{ __v: 0,
_id: 55c2e3142ac7b30d062f9c38,
permissions: [ 'Show' ] }
Ако, разбира се, инициализирате данните си или манипулирате, за да създадете запис в масива:
var user = new User({"permissions":["Create"]});
След това получавате масива, който сте добавили:
{ __v: 0,
_id: 55c2e409ec7c812b06fb511d,
permissions: [ 'Create' ] }
И ако искате „винаги“ да имате „Показване“ в разрешенията, тогава подобна промяна на куката може да наложи това за вас:
userSchema.pre("save",function(next) {
if (this.permissions.indexOf("Show") == -1)
this.permissions.push("Show");
next();
});
Което води до:
var user = new User({"permissions":["Create"]});
{ __v: 0,
_id: 55c2e5052219b44e0648dfea,
permissions: [ 'Create', 'Show' ] }
Това са начините, по които можете да контролирате настройките по подразбиране на записите си в масива, без да е необходимо изрично да ги присвоявате в кода си с помощта на модела.