MongoDB: обновить строковое значение для всех документов, где оно существует - PullRequest
0 голосов
/ 27 августа 2018
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"
        }
    ]
}

У меня есть 100 тыс. Документов с указанным выше шаблоном, и мне нужно обновить файл с «.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"
        }
    ]
}

Есть мысли, как мы можем сделать это в Монго? Очень ценится.

1 Ответ

0 голосов
/ 28 августа 2018
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()

Если есть записи по 100 тыс., Я бы предложил выполнить обновление с циклом, выбирающим по 10 тыс. За раз, исходя из вашей емкости MongoDB.

Я парень с питоном, извините, если не использовал правильный JS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...