首页 > 解决方案 > MongoDB:更新它存在的所有文档的字符串值

问题描述

collectionABC
/* 1 */
{
    "DealerId" : "39823398",
    "VehicleCategory" : [ 
        {
            "seqId" : "23987134983471982134HAD",
            "vehicleName" : "BMW",
            "vehicleImage" : "images/vehicle/270029.gif"
        }, 
        {
            "seqId" : "293874KJHKHKJH7878",
            "vehicleName" : "Audi",
            "vehicleImage" : "images/vehicle/27022398.gif"
        }
    ]
}

/* 2 */
{
    "DealerId" : "3987398",
    "VehicleCategory" : [ 
        {
            "seqId" : "2234423987134983471982134HAD",
            "vehicleName" : "Honda",
            "vehicleImage" : "images/vehicle/270029.gif"
        }, 
        {
            "seqId" : "9834293874KJHKHKJH7878",
            "vehicleName" : "Toyota",
            "vehicleImage" : "images/vehicle/27022398.gif"
        }
    ]
}

我有 100k 个具有上述模式的文档,并且需要将所有现有文档从“.gif”更新为“.png”。其余的一切都应该保持不变。

更新文档后,结果应如下所示:

collectionABC
/* 1 */
{
    "DealerId" : "39823398",
    "VehicleCategory" : [ 
        {
            "seqId" : "23987134983471982134HAD",
            "vehicleName" : "BMW",
            "vehicleImage" : "images/vehicle/270029.png"
        }, 
        {
            "seqId" : "293874KJHKHKJH7878",
            "vehicleName" : "Audi",
            "vehicleImage" : "images/vehicle/27022398.png"
        }
    ]
}

/* 2 */
{
    "DealerId" : "3987398",
    "VehicleCategory" : [ 
        {
            "seqId" : "2234423987134983471982134HAD",
            "vehicleName" : "Honda",
            "vehicleImage" : "images/vehicle/270029.png"
        }, 
        {
            "seqId" : "9834293874KJHKHKJH7878",
            "vehicleName" : "Toyota",
            "vehicleImage" : "images/vehicle/27022398.png"
        }
    ]
}

任何想法我们如何在 Mongo 中做到这一点?非常感谢。

标签: arraysmongodbmongodb-query

解决方案


bulk_update = db.media.initializeUnorderedBulkOp()
db.media.find().forEach(function(e, i) {
   e.VehicleCategory.forEach(function(vehicle, index){
          vehicle.vehicleImage = vehicle.vehicleImage.replace('.gif','.png')
    })
   bulk_update.find({"DealerId": e.DealerId}).update({"$set": e})
})
bulk_update.execute()

如果有 100k 条记录,我建议根据您的 MongoDB 容量,使用一次选择 10k 的循环进行更新。

我是一个 python 人,对不起,如果没有使用正确的 JS。


推荐阅读