Mongoose,更新数字数组中的单个元素

问题描述 投票:0回答:1

我对使用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);
}

仅更新数组的单个元素的正确方法是什么?

node.js mongodb mongoose
1个回答
0
投票

您可以直接使用 Mongoose updateOne 方法和 $set 运算符来简化更新操作。这是更新操作的简化版本,无需先检索文档:

const filter = { id: receivedMessage.id };
await myModel.updateOne(
  filter,
  { $set: { [`arrayOfValues.${receivedMessage.k}`]: receivedMessage.v } }
);
© www.soinside.com 2019 - 2024. All rights reserved.