Nilai default benar-benar tidak berfungsi dengan array, kecuali tentu saja itu adalah dokumen di dalam array dan Anda ingin menetapkan properti default untuk dokumen itu saat ditambahkan ke array.
Oleh karena itu array selalu diinisialisasi sebagai "kosong" kecuali tentu saja Anda dengan sengaja memasukkan sesuatu ke dalamnya. Untuk melakukan apa yang ingin Anda capai, tambahkan pra-penyimpanan kait yang memeriksa array kosong dan kemudian menempatkan nilai default di sana:
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);
});
Yang menciptakan nilai jika kosong:
{ __v: 0,
_id: 55c2e3142ac7b30d062f9c38,
permissions: [ 'Show' ] }
Jika tentu saja Anda menginisialisasi data Anda atau memanipulasi untuk membuat entri dalam array:
var user = new User({"permissions":["Create"]});
Kemudian Anda mendapatkan array yang Anda tambahkan:
{ __v: 0,
_id: 55c2e409ec7c812b06fb511d,
permissions: [ 'Create' ] }
Dan jika Anda ingin "selalu" memiliki izin "Tampilkan", maka perubahan serupa pada kait dapat memberlakukannya untuk Anda:
userSchema.pre("save",function(next) {
if (this.permissions.indexOf("Show") == -1)
this.permissions.push("Show");
next();
});
Yang menghasilkan:
var user = new User({"permissions":["Create"]});
{ __v: 0,
_id: 55c2e5052219b44e0648dfea,
permissions: [ 'Create', 'Show' ] }
Itulah cara Anda dapat mengontrol default pada entri array Anda tanpa perlu menetapkannya secara eksplisit dalam kode Anda menggunakan model.