Массовое обновление не обновляет значения в PyMongo - PullRequest
0 голосов
/ 23 декабря 2018

Я пытаюсь выполнить быстрое обновление моей большой коллекции, состоящей из объектов, выглядящих следующим образом:

{_id: 0, 'Name': 'Bob'}

Здесь я пытаюсь выполнить массовое обновление.Причина, по которой я использую цикл массовых операций, а не команду «update_many», заключается в том, что мое обновление для определенного идентификатора может иметь другое имя, поэтому мне нужно изменить значения, которые я передаю в наборе

bulk = myTable.initialize_unordered_bulk_op()
counter = 0
i = 1
while(i < 100000):
    bulk.find({ '_id': i }).update({ '$set': { 'Name': 'N' } })
    i += 1
    counter += 1

    if (counter % 500 == 0):
        bulk.execute()
        bulk = myTable.initialize_ordered_bulk_op()

if(counter % 500 != 0):
    bulk.execute()

Однако, когда я запускаю этот код, в таблице нет никаких изменений, и у каждой записи все еще есть имя 'Bob'

Есть идеи, как бы я это исправить?Я как-то не совершаю?В конечном итоге моя цель - быстро обновлять данные, но передавать такие значения, как

$set: { 'Name' : Names[i] }

1 Ответ

0 голосов
/ 23 декабря 2018

Мне было интересно, почему вы не используете что-то подобное?

from pymongo import UpdateOne
i = 1
commands = []
while(i < 100000):
    i += 1
    command = UpdateOne({"_id": i}, { "$set": { "Name": "N" } })
    commands.append(command)
    if (len(commands) == 1000):
        myTable.bulk_write(commands, ordered=False)
        commands = []
if(len(commands) != 0):
    myTable.bulk_write(commands, ordered=False)        

Это должно решить вашу проблему.

...