Standardværdier virker virkelig ikke med arrays, medmindre det selvfølgelig er et dokument i arrayet, og du vil indstille en standardegenskab for det dokument, når det føjes til arrayet.
Derfor initialiseres et array altid som "tomt", medmindre du selvfølgelig bevidst lægger noget i det. For at gøre det, du vil opnå, skal du tilføje en pre save hook, der tjekker for en tom matrix og ellers placerer en standardværdi derinde:
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);
});
Hvilket skaber værdien hvor tom:
{ __v: 0,
_id: 55c2e3142ac7b30d062f9c38,
permissions: [ 'Show' ] }
Hvis du selvfølgelig initialiserer dine data eller manipulerer for at oprette en post i arrayet:
var user = new User({"permissions":["Create"]});
Så får du det array, du tilføjede:
{ __v: 0,
_id: 55c2e409ec7c812b06fb511d,
permissions: [ 'Create' ] }
Og hvis du ville "altid" have "Vis" til stede i tilladelser, så kunne en lignende ændring af krogen håndhæve det for dig:
userSchema.pre("save",function(next) {
if (this.permissions.indexOf("Show") == -1)
this.permissions.push("Show");
next();
});
Hvilket resulterer i:
var user = new User({"permissions":["Create"]});
{ __v: 0,
_id: 55c2e5052219b44e0648dfea,
permissions: [ 'Create', 'Show' ] }
Det er de måder, hvorpå du kan kontrollere standardindstillingerne på dine array-indgange uden at skulle tildele dem eksplicit i din kode ved hjælp af modellen.