我想让我的mongodb OjectId到一个字段:
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('兼职'.decode("utf-8"))
不起作用,那么如何才能支持utf-8?
答案 0 :(得分:1)
Python mongodb documentation已为您准备好示例:
class bson.objectid.ObjectId(oid = None)
初始化一个新的ObjectId。
ObjectId(b'foo-bar-quux')
ObjectId('666f6f2d6261722d71757578')
答案 1 :(得分:0)
您是否有必要从字符串生成ObjectId?如果您只想为mongodb文档使用唯一ID,则可以自动生成一个
from bson.objectid import ObjectId
_id = ObjectId()
生成的ObjectId将基于机器的硬件签名和当前时间