猫鼬'最小化'空嵌套对象

时间:2015-02-05 17:42:48

标签: node.js mongodb mongoose

我创建了一个包含多个级别嵌套属性的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对象根本没有保存。所以简而言之,我想最小化每个空的嵌套属性(顶级属性除外)。

您有什么想法我能解决这个问题吗?

谢谢!

2 个答案:

答案 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}