为什么mongo汇总删除所有记录?

时间:2020-04-21 08:49:51

标签: mongodb mongodb-query aggregation-framework

db.getCollection('alert').aggregate([{
        "$match":{
            "_id":{
                "$in":[]
             }
         }
    },
    {
        "$addFields":{
            "state":"RESOLVED",
            "log":{
                "$concatArrays":["$log",[{ "message": "HOT alert"}]
            }
         },
    {
        "$out":"alert"
    }
])

我的mongodb版本是4.0.4 我正在使用上面的查询来更新与第一个管道匹配的警报。 我不知道为什么在运行此查询后,删除不符合条件的记录。 如果匹配,则记录将被更新并且不会被删除,只有与条件不匹配的记录才会被删除。

请检查并帮助我。如何保持所有记录不符合条件,但仍更新匹配记录

1 个答案:

答案 0 :(得分:1)

您可以在$cond阶段使用$addFields

db.getCollection("alert").aggregate([
  {
    "$addFields": {
      "state": {
        "$cond": [{ "$in": ["$_id", [YOUR_IDS]] }, "RESOLVED", "$state"]
      },
      "log": {
        "$cond": [
          { "$in": ["$_id", [YOUR_IDS]] },
          { "$concatArrays": ["$log", [{ "message": "HOT alert" }]] },
          "$log"
        ]
      }
    }
  },
  { "$out": "alert" }
])