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



我有一个用户 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)

我的代码有什么问题?

您必须在脚本中其他错误。我可以通过执行以下操作来重现您的错误:

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:

尝试此

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)

最新更新