Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从字符串中获取mongodb的有效对象id?_Python_Mongodb_Mongoengine_Objectid - Fatal编程技术网

Python 如何从字符串中获取mongodb的有效对象id?

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

我想将我的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="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()