如何为Mongoose中嵌入文档数组设置默认值
解决Mongoose嵌入文档数组默认值问题
你当前的问题是仅给ActionSchema的字段设置了默认值,但PostSchema里的action数组本身默认是空数组,所以新建Post文档时不会自动生成包含默认值的嵌入对象。要实现需求,需要给action字段设置数组级别的默认值,让它默认包含一个符合ActionSchema规则的对象。
修改后的完整Schema代码
const ActionSchema= new mongoose.Schema({ canEdit: { type: Boolean, default: true }, canDelete: { type: Boolean, default: false }, canMention: { type: Boolean, default: true } }); const PostSchema = new mongoose.Schema({ title: String, detail: String, author: mongoose.Schema.Types.ObjectId, action: { type: [ActionSchema], // 用函数返回默认数组,避免Mongoose引用类型默认值的共享问题 default: () => [{}] } });
关键说明
- 给
action字段新增default属性,值为返回包含空对象数组的函数。由于ActionSchema已定义各字段的默认值,Mongoose会自动为这个空对象填充对应的默认值,最终生成你期望的action数组结构。 - 使用函数返回默认数组是Mongoose的推荐写法,能避免多个文档共享同一个数组引用的潜在问题。
验证效果
当你调用Post.create({title: 'Happy New Year', detail: 'Happy New Year 2024', author: ObjectId('...')})新建文档时,生成的Post会自动包含如下结构:
action: [ { canEdit: true, canDelete: false, canMention: true, _id: ObjectId('...') // Mongoose自动生成的嵌入文档ID } ]
内容的提问来源于stack exchange,提问作者Epple
相关产品推荐
相关产品推荐

