gpt4 book ai didi

mongoose - Mongoose 单个嵌入式子文档默认

转载 作者:行者123 更新时间:2023-12-03 14:37:54 27 4
gpt4 key购买 nike

Mongoose在版本4.2.7中创建了一个新的单个子文档功能(documentationfeature request),允许使用单个嵌入式子文档架构,其行为方式与一对多子文档的行为相同。

在父级保存时创建默认单个子文档的最佳方法是什么?

var UserPermisssionsSchema = new mongoose.Schema({
siteAdmin: {
type: Boolean,
default: false,
}
});

var UserSchema = mongoose.Schema({
fname: String,
lname: String,
permissions: UserPermisssionsSchema
});

我希望在创建父用户文档时使用默认值创建 permissions字段。

这不起作用:

编辑: Mongoose 更改(在4.2.7和4.4.3之间的某个位置)发生更改后,现在可以正常工作
var UserSchema = mongoose.Schema({
fname: String,
lname: String,
permissions: {
type: UserPermisssionsSchema ,
default: UserPermisssionsSchema
}
});

最佳答案

请试试这个

var PerSchema = new mongoose.Schema({
siteAdmin: {type: Boolean, default: false}
});

var UserSchema = mongoose.Schema({
fname: String,
lname: String,
permissions: { type: PerSchema, default: () => ({}) },
});

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');
});
}

结果是
{ 
"_id" : ObjectId("56c68321a548be98198ebb71"),
"fname" : "asa",
"lname" : "dddd",
"permissions" : {
"_id" : ObjectId("56c68321a548be98198ebb70"),
"siteAdmin" : false
},
"__v" : 0
}

如果您想要 permissions的默认值为 {}。请尝试如下
var PerSchema = mongoose.Schema({
siteAdmin: {type: Boolean}
}, {_id: false});

var UserSchema = mongoose.Schema({
fname: String,
lname: String,
permissions: { type: PerSchema, required: true, default: {} },
});

测试
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');
});
}

结果是
{ "_id" : ObjectId("56c687427191d54021875fb1"), 
"fname" : "asa",
"lname" : "dddd",
"permissions" : { },
"__v" : 0
}

关于mongoose - Mongoose 单个嵌入式子文档默认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35494875/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com