Почему mon go агрегат удаляет все записи? - PullRequest
1 голос
/ 21 апреля 2020
db.getCollection('alert').aggregate([{
        "$match":{
            "_id":{
                "$in":[]
             }
         }
    },
    {
        "$addFields":{
            "state":"RESOLVED",
            "log":{
                "$concatArrays":["$log",[{ "message": "HOT alert"}]
            }
         },
    {
        "$out":"alert"
    }
])

Моя версия mongodb - 4.0.4. Я использую вышеуказанный запрос для обновления предупреждений, соответствующих первому конвейеру. Я не знаю, почему после выполнения этого запроса записи, не соответствующие условиям, были удалены. Если совпадение, записи обновляются и не удаляются, просто удаляются записи, не соответствующие условию.

Пожалуйста, проверьте и помогите мне. Как я могу сохранить все записи не совпадающими с условием, но все же обновить записи матчей

1 Ответ

1 голос
/ 21 апреля 2020

Вы можете использовать $cond с $addFields stage

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" }
])
...