如何在Python中将十六进制字符串转换为ObjectId

12

我有一个ObjectId的列表,正在对其进行迭代以查找键为ObjectId的字典中的值。

email_count = 0
# user_id_list is a list of ObjectId's
for user_id in user_id_list:
    # UuserIdemailCountD is a dict where they keys are objectIds
    email_count +=  UuserIdemailCountD[user_id]

我一直收到以下错误信息:

email_count +=  UuserIdemailCountD[user_id]
KeyError: ObjectId('54a9c84ebf2e4e5b258b5412')

当我迭代user_id_list并打印出id时,我得到的是一个普通的字符串,如下所示:54a9c84ebf2e4e5b258b5412

答案是将字符串转换为ObjectId吗?如果是这样,该怎么做?


尝试这样做:email_count+=UuserIdemailCountD.get(user_id, 0),所以如果user_id不存在,它将返回0,不会影响结果......UuserIdemailCountD字典中的值都是数字吗? - Narcisse Doudieu Siewe
那个有效了。但是为什么? - DBWeinstein
你得到了正确的 email_count 还是只是零? - Messa
1个回答

41

导入 ObjectId:

from bson import ObjectId

从 ObjectId 到字符串:

oid = ObjectId()
oid_str = str(oid)
# oid_str is now '555fc7956cda204928c9dbab'

从字符串到ObjectId:

oid_str = '555fc7956cda204928c9dbab'
oid2 = ObjectId(oid_str)
print(repr(oid2))
# ObjectId('555fc7956cda204928c9dbab')

如何连接oid2以执行以下查询... q = "{_id: { $in: [" + ids + "] } }" - Ben Fourie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接