批量更新不更新PyMongo中的值

时间:2018-12-23 17:31:35

标签: python mongodb pymongo

我正在尝试对包含的对象组成的大型集合进行快速更新:

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

我在这里尝试执行批量更新。我使用批量循环而不使用'update_many'命令的原因最终是我对特定ID的更新可能具有不同的名称,因此我需要更改在set中传递的值

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 :(得分:0)

我想知道你为什么不使用这种东西?

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)        

这应该可以解决您的问题。