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