Python 如何从字符串中获取mongodb的有效对象id?
我想将我的mongodb对象化为一个字段:Python 如何从字符串中获取mongodb的有效对象id?,python,mongodb,mongoengine,objectid,Python,Mongodb,Mongoengine,Objectid,我想将我的mongodb对象化为一个字段: class ZhinengStats(Document): zhineng_id = ObjectIdField(db_field="_id", primary_key=True, required=True, help_text="job id") 但有效的ObjectId必须是类型为'str'的12字节输入或24个字符的十六进制字符串,因此如果我这样做: ZhinengStats.objects(zhineng_id="programme
class ZhinengStats(Document):
zhineng_id = ObjectIdField(db_field="_id", primary_key=True, required=True, help_text="job id")
但有效的ObjectId必须是类型为'str'的12字节输入或24个字符的十六进制字符串,因此如果我这样做:
ZhinengStats.objects(zhineng_id="programmer").first()
我会得到一个错误。我认为散列是个好方法:
hash("programmer") # 7354308922443094682
但正如你所看到的,散列似乎不好
那么,如何获得有效的对象id呢
更新: 主要问题是因为这是一个中文字段,所以类似这样:
ObjectId('兼职'.解码(“utf-8”)
无法工作,因此如何使其支持utf-8?为您准备了以下示例:
类bson.objectid.objectid(oid=None)
初始化一个新的ObjectId
有什么理由必须从字符串生成ObjectId吗?如果您只是想为您的mongodb文档创建一个唯一的id,您可以像这样自动生成一个id
from bson.objectid import ObjectId
_id = ObjectId()
生成的ObjectId将基于机器的硬件签名,当前时间我对此有问题,中文不正确,例如ObjectId(u)兼职") 返回
bson.errors.InvalidId:u'\u517c\u804c'不是有效的ObjectId,它必须是'str'类型的12字节输入或24个字符的十六进制字符串
@roger这可能会有帮助:您的意思是ObjectId(“兼职“.decode”(“utf-8”)
?这无法工作。Python 2或Python 3?@SylvainLeroux Python 2检查此链接将对您有所帮助
from bson.objectid import ObjectId
_id = ObjectId()