无法向猫鼬文档添加属性

时间:2021-04-26 08:09:19

标签: javascript node.js mongodb mongoose

我有一个猫鼬模型,它有一些属性,且严格选项设置为 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.

这里出了什么问题?

1 个答案:

答案 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]);