TypeError: индексы списка должны быть целыми или кусочками, а не ObjectId - PullRequest
0 голосов
/ 20 марта 2019

У меня есть список пользователей user_list=["5c471d607f","5c63e9e46a","5c63e9e44e"] Я пытаюсь вставить его в mongodb, чтобы вставить его inro mongodb Мой код:

for i in range(0,len(user_list)):
    collection_4.update_one({'user_id':ObjectId(user_list[i])},{'$set':{'products': temp_list }},upsert=True)

This is giving me error, TypeError: list indices must be integers or slices, not ObjectId

Хотя я могу вставить его, когда я пытался:

collection_4.update_one({'user_id':ObjectId("5c471d607f")},{'$set':{'products': temp_list }},upsert=True)

В чем проблема с моим кодом?

Ответы [ 2 ]

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

В вашем скрипте должна быть другая ошибка.Я могу воспроизвести вашу ошибку, выполнив следующее:

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:
0 голосов
/ 20 марта 2019

попробуйте

for i in range(0,len(user_list)):
    myid = user_list[i]
    collection_4.update_one({'user_id':str(myid)},{'$set':{'products': temp_list }},upsert=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...