Mongoose在4.2.7版中创建了一个新的单个子文档功能(文档和功能请求),允许单个嵌入式子文档模式,其行为方式与一对多子文档的行为方式相同.
父保存后创建默认单个子文档的最佳方法是什么?
var UserPermisssionsSchema = new mongoose.Schema({
siteAdmin: {
type: Boolean,
default: false,
}
});
var UserSchema = mongoose.Schema({
fname: String,
lname: String,
permissions: UserPermisssionsSchema
});
Run Code Online (Sandbox Code Playgroud)
我希望permissions在创建父用户文档时使用默认值创建该字段.
这不起作用:
编辑:这现在在Mongoose更改之后工作,发生在4.2.7和4.4.3之间
var UserSchema = mongoose.Schema({
fname: String,
lname: String,
permissions:
type: UserPermisssionsSchema ,
default: UserPermisssionsSchema,
}
});
Run Code Online (Sandbox Code Playgroud)
zan*_*ngw 24
请试试这个
var PerSchema = new mongoose.Schema({
siteAdmin: {type: Boolean, default: false}
});
var UserSchema = mongoose.Schema({
fname: String,
lname: String,
permissions: { type: PerSchema, default: PerSchema },
});
Run Code Online (Sandbox Code Playgroud)
测试它 Mongoose v4.4.3
var User = mongoose.model('User', UserSchema);
function setUser() {
var u = new User({
fname: 'asa',
lname: 'dddd'
});
u.save(function(err) {
if (err)
console.log(err);
else
console.log('save user successfully');
});
}
Run Code Online (Sandbox Code Playgroud)
结果是
{
"_id" : ObjectId("56c68321a548be98198ebb71"),
"fname" : "asa",
"lname" : "dddd",
"permissions" : {
"_id" : ObjectId("56c68321a548be98198ebb70"),
"siteAdmin" : false
},
"__v" : 0
}
Run Code Online (Sandbox Code Playgroud)
如果你想要默认值permissions是{}.请尝试如下
var PerSchema = mongoose.Schema({
siteAdmin: {type: Boolean}
}, {_id: false});
var UserSchema = mongoose.Schema({
fname: String,
lname: String,
permissions: { type: PerSchema, required: true, default: {} },
});
Run Code Online (Sandbox Code Playgroud)
测试
function setUser() {
var u = new User({
fname: 'asa',
lname: 'dddd'
});
u.save(function(err) {
if (err)
console.log(err);
else
console.log('save user successfully');
});
}
Run Code Online (Sandbox Code Playgroud)
结果是
{ "_id" : ObjectId("56c687427191d54021875fb1"),
"fname" : "asa",
"lname" : "dddd",
"permissions" : { },
"__v" : 0
}
Run Code Online (Sandbox Code Playgroud)
Mongoose维护者在这里,我推荐这个:
var UserSchema = mongoose.Schema({
fname: String,
lname: String,
permissions:
type: UserPermisssionsSchema ,
default: () => ({}),
}
});
Run Code Online (Sandbox Code Playgroud)
这将permissions默认为空对象,相对于UserPermissionsSchema可能具有的任何默认值.如果设置default为,如果您的UserPermisssionsSchema某个属性恰好与mongoose架构方法重叠,则可能会出现一些不良行为.