带有嵌套可选对象的猫鼬模式
Mongoose Schema with nested optional object
使用以下架构:
{
data1: String,
nested: {
nestedProp1: String,
nestedSub: [String]
}
}
当我这样做时 new MyModel({data1: 'something}).toObject()
显示新创建的文档是这样的:
{
'_id' : 'xxxxx',
'data1': 'something',
'nested': {
'nestedSub': []
}
}
即嵌套文档是用空数组创建的。
如何使 "nested" 成为完全可选的 - 即,如果输入数据中未提供,则根本不会创建?
我不想为 "nested" 使用单独的模式,不需要那么复杂。
您可以使用strict: false
new Schema({
'data1': String,
'nested': {
},
},
{
strict: false
});
然后模式是完全可选的。要仅将 nested
设置为完全可选,您可以执行以下操作:
new Schema({
'data1': String,
'nested': new Schema({}, {strict: false})
});
不过我没试过
没有附加 Schema 对象的解决方案可以使用如下所示的挂钩
MySchema.pre('save', function(next) {
if (this.isNew && this.nested.nestedSub.length === 0) {
this.nested.nestedSub = undefined;
}
next();
});
以下架构满足我的原始要求:
{
data1: String,
nested: {
type: {
nestedProp1: String,
nestedSub: [String]
},
required: false
}
}
有了这个,如果没有指定子文档,新文档将被创建 "missing"。
使用以下架构:
{
data1: String,
nested: {
nestedProp1: String,
nestedSub: [String]
}
}
当我这样做时 new MyModel({data1: 'something}).toObject()
显示新创建的文档是这样的:
{
'_id' : 'xxxxx',
'data1': 'something',
'nested': {
'nestedSub': []
}
}
即嵌套文档是用空数组创建的。
如何使 "nested" 成为完全可选的 - 即,如果输入数据中未提供,则根本不会创建?
我不想为 "nested" 使用单独的模式,不需要那么复杂。
您可以使用strict: false
new Schema({
'data1': String,
'nested': {
},
},
{
strict: false
});
然后模式是完全可选的。要仅将 nested
设置为完全可选,您可以执行以下操作:
new Schema({
'data1': String,
'nested': new Schema({}, {strict: false})
});
不过我没试过
没有附加 Schema 对象的解决方案可以使用如下所示的挂钩
MySchema.pre('save', function(next) {
if (this.isNew && this.nested.nestedSub.length === 0) {
this.nested.nestedSub = undefined;
}
next();
});
以下架构满足我的原始要求:
{
data1: String,
nested: {
type: {
nestedProp1: String,
nestedSub: [String]
},
required: false
}
}
有了这个,如果没有指定子文档,新文档将被创建 "missing"。