В вашем скрипте должна быть другая ошибка.Я могу воспроизвести вашу ошибку, выполнив следующее:
from bson import ObjectId
l = ['a', 'b', 'c']
l[ObjectId('5c91ec870000000000000000')]
дает:
TypeError: list indices must be integers or slices, not ObjectId
Вы уверены, что нигде не пытаетесь нарезать список, используя ObjectId
, ачем использовать индекс?
Возможно, вам придется напечатать больше кода, потому что ваш текущий пример выглядит нормально.
Еще одно улучшение, которое подхватил @DirtyBit, вы можете использовать enumerate
для итерациипо списку при отслеживании индекса:
for i, item in enumerate(user_list):
collection_4.update_one({'user_id':ObjectId(item)},{'$set':{'products': temp_list }},upsert=True)
Но опять же, вам не нужен индекс, поэтому вы также можете просто сделать:
for item in user_list: