使用以下架构:
{
data1: String,
nested: {
nestedProp1: String,
nestedSub: [String]
}
}
当我new MyModel({data1: 'something}).toObject()
显示新创建的文档时:
{
'_id' : 'xxxxx',
'data1': 'something',
'nested': {
'nestedSub': []
}
}
即。使用空数组创建嵌套文档。
如何制作"嵌套"完全可选 - 即如果没有在输入数据上提供,则根本不创建?
我不想为"嵌套"使用单独的架构,不需要那么复杂。
答案 0 :(得分:15)
以下架构满足我原来的要求:
{
data1: String,
nested: {
type: {
nestedProp1: String,
nestedSub: [String]
},
required: false
}
}
有了这个,如果没有指定一个子文档,就会创建带有“missing”子文档的新文档。
答案 1 :(得分:1)
您可以使用strict: false
new Schema({
'data1': String,
'nested': {
},
},
{
strict: false
});
然后架构是完全可选的。要仅将nested
设置为完全可选,您可以执行以下操作:
new Schema({
'data1': String,
'nested': new Schema({}, {strict: false})
});
但我从未尝试过
答案 2 :(得分:0)
没有其他Schema对象的解决方案可以使用类似以下的挂钩
MySchema.pre('save', function(next) {
if (this.isNew && this.nested.nestedSub.length === 0) {
this.nested.nestedSub = undefined;
}
next();
});