我有下面的异步函数。 DeviceStatus
是一个 Mongo 设备集合,它定义了属性 SerialNumber
和 NumberOfRetries
。我想将 serialNumber
和 retries
作为输入。 serialNumber
是集合中已知的字符串。 retries
是表示小于 10 的 int 的字符串。在下面的异步函数中,我想读取 retries
值,将其加 1,然后更新 mongo 文档使用相同的 serialNumber
static async incrementNumberOfRetries(serialNumber, retries){
const retriesInt = parseInt(retries);
const accumulatedRetriesInt = retriesInt + 1;
const accumulatedRetriesString = accumulatedRetriesInt.toString();
try {
await DeviceStatus
.updateOne({
"SerialNumber": serialNumber
},
{
$set: {
"NumberOfRetries" : accumulatedRetriesString
}
})
} catch(error) {
console.log(error)
}
}
我不完全确定我在这里做错了什么。我知道前 3 行是正确的,并且没有发现任何错误。但是 NumberOfRetries
未在集合中正确设置。最初,它被设置为 1,所以我测试了这个函数并且值没有改变。我使用 updateOne
的方式有问题吗?如何传入一个变量来执行更新?
最佳答案
要增加 numberOfRetries
,您可以使用 MongoDB 更新运算符 $inc
.
DeviceStatus.update({
serialNumber,
},
{
$inc: {
numberOfRetries: 1
}
})
请参阅此处的工作示例 MongoDb Playground
你的代码应该是这样的
static async incrementNumberOfRetries(serialNumber, retries){
try {
await DeviceStatus
.update({
"SerialNumber": serialNumber
},
{
$inc: {
"NumberOfRetries" : 1
}
})
} catch(error) {
console.log(error)
}
}
查看 $inc operator here 的文档
关于javascript - 如何根据字符串输入更新一个Mongo文档Node.js?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66974535/