[英]Why doesn't my schema to add default values in mongoose arrays?
我有這樣的架構:
var CustomUserSchema = new Schema({
role: [],
permissions: [],
});
permissions
字段存儲一個如下所示的字符串數組:
["Delete", "Show","Create"]
而
role
字段存儲一個如下所示的對象數組:
[
{
name:"admin",
priority:10,
permissions: ["Delete", "Show" , "update"]
},
{
name:"user",
priority:5,
permissions: ["Delete", "Show"]
}
]
現在,我的要求是能夠將“顯示”存儲為模式中permissions
字段的默認值,並將“用戶”存儲為角色字段內的名稱的默認值,優先級0表示role
字段內的priority
和“顯示”對於role
字段內的permissions
。
試着自己,我想出了這個:
var CustomUserSchema = new Schema({
role: [{
name: {type: String, default: 'user'},
priority:{ type: Number, default: 0 } ,
permissions: [{type:String, default:'Show'}]
}],
permissions: [{type:String, default:'Show'}]
});
但它根本沒有為字段分配默認值,而是為字段提供大小為0的數組。
以上架構似乎有什么問題? 如何將這些存儲為默認值?
默認值實際上不適用於數組,除非它當然是數組中的文檔,並且您希望在添加到數組時為該文檔設置默認屬性。
因此,數組總是初始化為“空”,除非你故意在其中加入一些東西。 為了實現您想要實現的目標,請添加一個預保存掛鈎 ,用於檢查空數組,然后在其中放置一個默認值:
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' ] }
這些是您可以控制數組條目的默認值的方法,而無需使用模型在代碼中顯式分配它們。
你可以用這種方式在mongoose中添加默認數組值 -
var CustomUserSchema = new Schema({
role: {
type: Array,
default: {
name: 'user',
priority: 0,
permissions: ['Show']
}
},
permissions: {
type: [String],
default: ['Show']
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.