TypeError:列表索引必须是整数或切片,而不是ObjectId

时间:2019-03-20 06:26:50

标签: python mongodb list

我有一个用户user_list=["5c471d607f","5c63e9e46a","5c63e9e44e"]的列表,我试图将其插入mongodb以便将其插入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 :(得分:0)

您的脚本中某处必须有另一个错误。我可以通过执行以下操作来重现您的错误:

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:

答案 1 :(得分:-1)

尝试

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)