javascript - 如何根据字符串输入更新一个Mongo文档Node.js?

标签 javascript node.js mongodb

我有下面的异步函数。 DeviceStatus 是一个 Mongo 设备集合,它定义了属性 SerialNumberNumberOfRetries。我想将 serialNumberretries 作为输入。 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/

相关文章:

javascript - 无论如何,是否可以将数组返回到不同的网格列

javascript - 构造函数内的循环有什么问题? [JS]

javascript - 如何在视频完成后加载网页

node.js - Passport-http 错误请求

database - 查找其中一个字段的值不为空且不存在于不同字段中的 MongoDB 文档

database - Mongodb 复制(辅助服务器)

mongodb - 如何使用 Mongo shell 命令在数组中插入对象?

javascript - 如何查找发生语法错误的原因以及如何实现全局化格式

node.js - Win8安装express.js失败

JavaScript:从导入的文件导入文件