我对使用nodejs和mongoose开发应用程序有点陌生,我试图通过修改其中的单个值来更新数字数组,但我找不到正确的方法。
这是文件:
{
id:5,
arrayOfValues:[2,3,4,5]
}
假设我收到一个值10,必须存储在位置1,期望的结果是:
{
id:5,
arrayOfValues:[2,10,4,5]
}
我考虑过使用
model.findOne()
,然后使用model.updateOne()
,但由于此操作每分钟可以完成几次,所以我正在寻找一种更有效的方法。
编辑:这是我当前的打字稿代码:
const filter = {'id':receivedMessage.id};
const options = {upsert:true, includeResultMetadata: true};
const foundDocument = await myModel.findOne(filter);
if(foundDocument){
let tempArray = foundDocument.myArray;
let position = receivedMessage.k;
let value = receivedMessage.v
tempArray[position] = value
await myModel.updateOne(filter, {myArray: tempArray}, options);
}
仅更新数组的单个元素的正确方法是什么?
您可以直接使用 Mongoose updateOne 方法和 $set 运算符来简化更新操作。这是更新操作的简化版本,无需先检索文档:
const filter = { id: receivedMessage.id };
await myModel.updateOne(
filter,
{ $set: { [`arrayOfValues.${receivedMessage.k}`]: receivedMessage.v } }
);