Python 通过匹配_id更新MongoDB集合
我正在尝试使用_id上的条件从Python更新mongodb集合 比如,如果我在python数据框中找到了匹配的_id,我需要在collection中更新相应的文档 下面的脚本正在运行,但执行需要时间,如果有太多的文档,是否有任何有效的方法来处理此问题。请指教Python 通过匹配_id更新MongoDB集合,python,mongodb,mongodb-update,Python,Mongodb,Mongodb Update,我正在尝试使用_id上的条件从Python更新mongodb集合 比如,如果我在python数据框中找到了匹配的_id,我需要在collection中更新相应的文档 下面的脚本正在运行,但执行需要时间,如果有太多的文档,是否有任何有效的方法来处理此问题。请指教 for document in db.AMTicketData.find(): for index, row in AMTicketData1.iterrows(): if(row['_id']==a['_id']
for document in db.AMTicketData.find():
for index, row in AMTicketData1.iterrows():
if(row['_id']==a['_id']):
db.AMTicketData.update_one({'_id': row['_id']},{'$set': {'Application_Name': row['Application_Name']}}, upsert=True)
break
我使用了下面的批量操作代码,能够批量更新集合
bulk = db.AMTicketData.initialize_unordered_bulk_op()
for index, row in AMTicketData1.iterrows():
bulk.find({'_id':row['_id']}).update_one({'$set':{'Application_Name':row['Application_Name']}})
bulk.execute()
您可以尝试使用批量写入。您只需创建一个包含所有更新的数组,并在collection.bulk\u write(更新列表)中应用一次即可 比如:
updates = []
for document in db.AMTicketData.find():
for index, row in AMTicketData1.iterrows():
if(row['_id']==a['_id']):
updates.append(UpdateOne({'_id': row['_id']}, {'$set': {'Application_Name': row['Application_Name']}}, upsert=True)
break
db.AMTicketData.bulk_write(updates)
谢谢您的回复。我试过了,但是我得到了错误“NameError:name'UpdateOne'未定义”,不确定我为什么会得到这个错误我可以使用批量更新,我已经用这些代码编辑了我的问题,谢谢你的帮助和分享有关批量操作的信息。