Обновите коллекцию MongoDB, сопоставив _id - PullRequest
1 голос
/ 20 марта 2019

Я пытаюсь обновить коллекцию mongodb из Python, используя условие для _id

Например, если я нашел совпадение _id в кадре данных python, мне нужно обновить соответствующий документ в сборке. Ниже работает скрипт, но это требует времени дляЕсли существует слишком много документов, существует ли эффективный способ справиться с этим.Пожалуйста, совет

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()

1 Ответ

2 голосов
/ 20 марта 2019

Вы можете попробовать использовать массовую запись.Вам просто нужно создать массив со всеми обновлениями и применить его один раз с collection.bulk_write (list_of_updates)

Что-то вроде:

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)

https://docs.mongodb.com/manual/core/bulk-write-operations/

...