如何在mongo 3.6的聚合管道中使用updateMany

时间:2020-04-06 15:06:44

标签: mongodb mongodb-query

下面的查询更新许多带有聚合管道的版本在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"
}

0 个答案:

没有答案