因此,在尝试更新 mongoose 中的文档时,我意识到当我对使用 Model.findOne()
获得的文档执行 obj.key=value
时,它不会将属性分配给它的值。但是在尝试 obj.set(key, value) 之后,该属性被分配给其在文档中的值。那么这是为什么呢?通常,当我对对象执行第一个方法时,该对象会获取该属性。 .set()
函数是什么?和 Mongoose 有关系吗?
//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]
.
关于javascript - obj.key=value 和 obj.set(key, value) 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55777934/