首页 > 解决方案 > 如何根据字符串输入更新一个 Mongo 文档 Node.js?

问题描述

我有下面的异步功能。DeviceStatus是具有SerialNumber定义和NumberOfRetries定义属性的 Mongo 设备集合。我想将 aserialNumberretries. 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吗?如何传入变量来执行更新?

标签: javascriptnode.jsmongodb

解决方案


要增加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 运算符的文档


推荐阅读