MongoDB findOneAndUpdate 值小于其他值

MongoDB findOneAndUpdate for value less than other value

如果一个值小于另一个值,我似乎无法找出将值更新(递增)1 的正确语法。以下是更多详细信息:

数据结构

{
    "currentTask": 0,
    "maximumTask":10
}

我想做什么

  1. 如果有文件currentTask < maximumTask
  2. 检索该文档
  3. currentTask 值增加 1

我试过的

let solver = await solvers.findOneAndUpdate({"currentTask":{"$lt": "$maximumTask"}},{"$inc":{"currentTask":1}});

我觉得我很接近,但显然是 MongoDB 的新手!任何帮助将不胜感激:)

您使用的语法是将文档中的值与输入值(未保存在文档中)进行比较。如果要比较文档中的两个值,请使用 $expr:

db.collection.findOneAndUpdate({
  $expr: {
    $lt: [
      "$currentTask",
      "$maximumTask"
    ]
  }
},
{
  $inc: {
    currentTask: 1
  }
})

Playground example

此回答将return文档更新。要在更新后获取文档,请像这样使用 options

db.collection.findOneAndUpdate(
{$expr: {$lt: ["$currentTask", "$maximumTask"]}},
{$inc: {currentTask: 1}},
{returnNewDocument: 1})