Как использовать updateMany с конвейером агрегации в пн go 3,6 - PullRequest
0 голосов
/ 06 апреля 2020

Следующий запрос updateMany с конвейером агрегации работает в v4.2

db.AlertPreferences.updateMany({},    [
  {
     $match: {
        $expr: {
           $or: [
              { $ne: ["$preferences.MCN-ONE", null] },
              { $ne: ["$preferences.MCN-TWO", null] },
              { $ne: ["$preferences.MCN-THREE", null] }
           ]
        }
     }
  },
  {
     $addFields : {
        preferences: {
           $mergeObjects: [
              { "MCN-ONE": "$preferences.MCN-ONE" },
              { "MCN-TWO": "$preferences.MCN-TWO" },
              { "MCN-THREE": "$preferences.MCN-THREE" }
           ]
        }
     }
  }
])

Как изменить этот запрос для запуска в v3.6, когда updateMany с функцией конвейера агрегации недоступен?

// ОБНОВЛЕНИЕ Это запрос в рамке, основанный на предложениях от @ prasad_

db.collection.aggregate([
  {
     $match: {
        $expr: {
           $or: [
              { $ne: ["$preferences.MCN-ONE", null] },
              { $ne: ["$preferences.MCN-TWO", null] },
              { $ne: ["$preferences.MCN-THREE", null] }
           ]
        }
     }
  }
]).forEach(doc =>db.preferences.updateOne({ _id: doc._id },      {
     $set : {
        preferences: {
           $mergeObjects: [
              { "MCN-ONE": "$preferences.MCN-ONE" },
              { "MCN-TWO": "$preferences.MCN-TWO" },
              { "MCN-THREE": "$preferences.MCN-THREE" }
           ]
        }
     }
  }))

Но он не обновляет документы. Есть идеи, что не так? Это продолжение post .

Например, это документ

{
"_id" : ObjectId("5d721f5296eaaafd1df263e8"),
"assetId" : "ALL",
"createdTime" : ISODate("2019-09-06T08:56:50.065Z"),
"default" : false,
"lastUpdatedTime" : ISODate("2019-09-06T09:11:35.463Z"),
"platformFleetOrgId" : "A7A33DA4C5CE4DEFBA7E4AFA5CC9D0EE",
"platformPreferenceId" : "F015049C075E4B1E80A1BF52F5EC3A20",
"platformUserId" : "686102DBD5B241D3B2165381CBFD3FC8",
"preferences" : {
    "MCN-TWO" : [ 
        "ALERTLIST"
    ],
    "MCN-ONE" : [ 
        "MOBILEPUSH", 
        "ALERTLIST", 
        "WEBPUSH"
    ],
    "MCN-THREE" : [ 
        "ALERTLIST"
    ],
    "CCC-ALARM" : [ 
        "MOBILEPUSH"
    ],
    "SSD-ALARM" : [ 
        "MOBILEPUSH"
    ],
    "TFT-ALARM" : [ 
        "MOBILEPUSH", 
        "ALERTLIST"
    ],
    "REC-WARN" : []
},
"solutionContext" : "mfm"
}

Я ожидаю следующий результат после выполнения запроса.

{
"_id" : ObjectId("5d721f5296eaaafd1df263e8"),
"assetId" : "ALL",
"createdTime" : ISODate("2019-09-06T08:56:50.065Z"),
"default" : false,
"lastUpdatedTime" : ISODate("2019-09-06T09:11:35.463Z"),
"platformFleetOrgId" : "A7A33DA4C5CE4DEFBA7E4AFA5CC9D0EE",
"platformPreferenceId" : "F015049C075E4B1E80A1BF52F5EC3A20",
"platformUserId" : "686102DBD5B241D3B2165381CBFD3FC8",
"preferences" : {
    "MCN-TWO" : [ 
        "ALERTLIST"
    ],
    "MCN-ONE" : [ 
        "MOBILEPUSH", 
        "ALERTLIST", 
        "WEBPUSH"
    ],
    "MCN-THREE" : [ 
        "ALERTLIST"
    ]
},
"solutionContext" : "mfm"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...