我正在尝试对包含的对象组成的大型集合进行快速更新:
{_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] }
答案 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)
这应该可以解决您的问题。