mongodb Mongo查询$inc和$set

uqjltbpv  于 2023-03-07  发布在  Go
关注(0)|答案(1)|浏览(199)

我尝试此操作时出现错误

db.getCollection("errors").update({
    _id: ObjectId("63ff2a2351c56c92e265cf4c")
}, [
    {
        $inc: {
            'tryCount': 1
        }
    },
    {
        $set: {
            status: {
                $cond: {
                    if : {
                        $gte: ["tryCount", 4]
                    },
                    then: 'failed',
                    else : '$status',
                }
            }
        }
    }
]);

解决这个问题的最好办法是什么?
当tryCount大于3时,我需要更改状态

46qrfjad

46qrfjad1#

你跑吧

db.getCollection("errors").update(
   { <filter> }, 
   [ <aggregation pipeline> ]
)

问题是$incUpdate Operator,它仅在更新操作中可用,例如,在db.collection.updateMany()db.collection.findAndModify()中可用,但在Aggregation Pipelines中不可用。
试试这个:

db.getCollection("errors").updateOne( 
// or db.getCollection("errors").updateMany(
   { _id: ObjectId("63ff2a2351c56c92e265cf4c") },
   [
      {
         $set: {
            tryCount: { $add: ["$tryCount", 1] }
         }
      },
      {
         $set: {
            status: {
               $cond: {
                  if: { $gte: ["tryCount", 4] },
                  then: 'failed',
                  else: '$status',
               }
            }
         }
      }
   ]
);

相关问题