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

时间:2015-05-09 06:47:28

标签: python mongodb mongoengine objectid

我想让我的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?

2 个答案:

答案 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将基于机器的硬件签名和当前时间