obj.key=value 和 obj.set(key, value) 之间的区别



因此,在尝试更新猫鼬中的文档时,我意识到当我obj.key=value使用Model.findOne()获得的文档时,它不会将属性分配给其值。但是在尝试 obj.set(键,值(后,该属性被分配给文档中的值。这是为什么呢?通常,当我对对象执行第一种方法时,该对象会获取该属性。什么是.set()功能?和猫鼬有关系吗?

//this works
async function updateItem(){
        let updatedItem = await Item.findOne({name:req.body.itemName});
        Object.entries(req.body).forEach(elem=>{
            if(elem[0]!=="itemName"){
                updatedItem.set(elem[0], elem[1]);
            };
        });
    };
    updateItem();
});

//this doesn't work
async function updateItem(){
        let updatedItem = await Item.findOne({name:req.body.itemName});
        Object.entries(req.body).forEach(elem=>{
            if(elem[0]!=="itemName"){
                updatedItem.elem[0] = elem[1];
            };
        });
    };
    updateItem();
});

这意味着updatedItem不是一个对象,它是一个Map,要将项目添加到Map,您需要使用 get 方法。

要指出的另一件事是,当您设置updatedItem.elem[0]时,您实际上是在尝试将键"elem[0]"添加到updatedItem。要解决此问题,您需要使用带有方括号的动态属性表示法:

updatedItem[elem[0]] = elem[1];

这会生成一个elem[0] 的新键,而不是elem[0]键。

最新更新