updateOne 基于条件

updateOne based on condition

await products.updateOne(
        {
          $and: [
            { name: { $eq: name } },
            { $expr: { $lt: ["$remaining", "$capacity"] } },
          ],
        },
        { $inc: { remaining: 1 } },
        { returnOriginal: false }
      );

不是像 { $expr: { $lt: ["$remaining", "$capacity"] } } 这样在查询中包含条件,有没有办法将此条件包含在更新参数中?

这样做的原因是如果 name 匹配,我希望 returned matchCount 到 return 1。

是的,如果您使用 mongo 4.2+ 使用聚合更新,就可以做到这一点。

db.collection.update({
  $and: [ //condition goes here
    {
      name: {
        $eq: "name"
      }
    },
    
  ],
  
},
[
  {
    "$set": { //conditional update
      "remaining": {
        "$switch": {
          "branches": [
            {
              case: {
                $lt: [ //condition to update
                  "$remaining",
                  "$capacity"
                ]
              },
              then: {
                $add: [ //true case
                  "$remaining",
                  1
                ]
              }
            }
          ],
          default: {
            $add: [ //if no match
              "$remaining",
              0
            ]
          }
        }
      }
    }
  }
])

playground