我有一个猫鼬模型,它有一些属性,且严格选项设置为 false。我从这个模型创建了一个空文档,我想向它添加属性。架构中定义的将添加到对象中,未定义的不会。
let mySchema = new mongoose.Schema({definedInSchema: {type: boolean}}, {strict: false});
const myModel = mongoose.model('name', mySchema);
let properties = {
definedInSchema: true,
undefinedInSchema: true
};
let myDocument = new myModel();
for (let i in properties)
myDocument[i] = properties[i];
console.log(myDocument);
//output: the object myDocument doesn't have the property that wasn't defined in the schema.
这里出了什么问题?
答案 0 :(得分:1)
模型实例不仅仅是一个简单的 javascript 对象,还有一个内部 _doc
用于跟踪每个字段的值。为模式中定义的字段自动创建 getter 和 setter 函数,并在实例化模型时添加字段,如
const thing = new Thing({ iAmNotInTheSchema: true });
请注意,这是文档中显示的字段不在架构中的方式。
如果您像这样创建文档,undefinedInSchema
将可以正常访问:
let myDocument = new myModel(properties);
如果在创建对象后确实需要其他字段,则需要显式调用 set
,例如
for (let i in properties)
myDocument.set(i, properties[i]);