我创建了一个包含多个级别嵌套属性的mongoose模式。它在这里:
var Person = new mongoose.Schema({
name: String,
parents: {
mom: {
name: String,
birthYear: Number
},
dad: {
name: String,
birthYear: Number
}
}
});
在我的示例中,可能有两种文档状态:
parents
对象parents
对象必须为空{}
我的问题是,如果parent
对象为空,则文档存储如下:
{
name: 'Some Buddy',
parents: {
mom: {},
dad: {}
}
}
虽然预期的数据应该是这样的:
{
name: 'Some Buddy'
parents: {}
}
我已经阅读了很多关于minimize: true
的内容,但它并没有为我提供完整的解决方案,因为parents
对象根本没有保存。所以简而言之,我想最小化每个空的嵌套属性(顶级属性除外)。
您有什么想法我能解决这个问题吗?
谢谢!
答案 0 :(得分:1)
我也是这样。在下面的架构中,starred 未初始化
Schema({minimize: false})
export class User {
@Prop()
_id: Number;
@Prop()
name: string;
@Prop()
sessionId: string;
@Prop()
_token: string;
@Prop({type: mSchema.Types.Map})
starred: {
type: mSchema.Types.Map,
of: starred,
default: {}
};
}
export interface starred {
owner: string;
repo: Number;
tags: string[];
}
运行后的MongoDB输出
{"_id":{"$numberInt":"id"},"name":"name","sessionId":"wPEOw6vL0oTHKKav2nSlRg==","_token":"token","__v":{"$numberInt":"0"}}
答案 1 :(得分:0)
我的对象数组也是空的,尽管我排除了“最小化”选项:
我做了很多研究,但不知道如何解决这个问题
const mongoose = require('mongoose');
const DateSchema = { type: Date, required: false, default: new Date(false) };
const NumberSchema = { type: Number, required: false, default: 1 };
const StringSchema = { type: String, required: false, default: "" };
const CustomSchema = {
tempoaSchedaInOre: DateSchema,
tempoTotaleInOre: DateSchema
};
const fasiSchema = new mongoose.Schema( {
utente: StringSchema,
fase: [{
controlloMateriale : CustomSchema,
equipaggiamentog : CustomSchema
}]
}
,{ minimize: false } //Crea componenti anche se vuoti
);
mongoose.model('fasi',fasiSchema);
在 MongoDb 中生成:
{"_id":{"$oid":"5fddcffbada9d34460510774"},"utente":"","fase":[],"__v":0}