Sim*_*aur 7 javascript arrays mongoose mongodb
我有这样的架构:
var CustomUserSchema = new Schema({
role: [],
permissions: [],
});
Run Code Online (Sandbox Code Playgroud)
permissions field存储一个如下所示的字符串数组:
["Delete", "Show","Create"]
Run Code Online (Sandbox Code Playgroud)
而
role field存储一个如下所示的对象数组:
[
{
name:"admin",
priority:10,
permissions: ["Delete", "Show" , "update"]
},
{
name:"user",
priority:5,
permissions: ["Delete", "Show"]
}
]
Run Code Online (Sandbox Code Playgroud)
现在,我的要求是能够存储"显示"为默认值permissions字段中架构和存储"用户"作为默认值角色名称字段,优先级0的内部的priority内role场"秀"的permissions内role领域.
试着自己,我想出了这个:
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'}]
});
Run Code Online (Sandbox Code Playgroud)
但它根本没有为字段分配默认值,而是为字段提供大小为0的数组.
以上架构似乎有什么问题?如何将这些存储为默认值?
Bla*_*ven 18
默认值实际上不适用于数组,除非它当然是数组中的文档,并且您希望在添加到数组时为该文档设置默认属性.
因此,数组总是初始化为"空",除非你故意在其中加入一些东西.为了实现您想要实现的目标,请添加一个预保存挂钩,用于检查空数组,然后在其中放置一个默认值:
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);
});
Run Code Online (Sandbox Code Playgroud)
这会创建空值:
{ __v: 0,
_id: 55c2e3142ac7b30d062f9c38,
permissions: [ 'Show' ] }
Run Code Online (Sandbox Code Playgroud)
当然,如果您初始化数据或操作以在数组中创建条目:
var user = new User({"permissions":["Create"]});
Run Code Online (Sandbox Code Playgroud)
然后你得到你添加的数组:
{ __v: 0,
_id: 55c2e409ec7c812b06fb511d,
permissions: [ 'Create' ] }
Run Code Online (Sandbox Code Playgroud)
如果你想"总是"在权限中出现"显示",那么对钩子的类似更改可以强制执行:
userSchema.pre("save",function(next) {
if (this.permissions.indexOf("Show") == -1)
this.permissions.push("Show");
next();
});
Run Code Online (Sandbox Code Playgroud)
结果如下:
var user = new User({"permissions":["Create"]});
{ __v: 0,
_id: 55c2e5052219b44e0648dfea,
permissions: [ 'Create', 'Show' ] }
Run Code Online (Sandbox Code Playgroud)
这些是您可以控制数组条目的默认值的方法,而无需使用模型在代码中显式分配它们.
| 归档时间: |
|
| 查看次数: |
6810 次 |
| 最近记录: |