从文档中的数据生成 mongodb 的 ObjectId 值



只是为了检查这是否可能以及是否值得麻烦:

我使用的是python 3.9.5,mongoengine是ORM。

比方说,我有数据要保存在一个集合中:

{
"value": string,
"origin: string,
"parent": string,
....
}

当字段";值";以及";原点";是独一无二的。

现在,我希望能够控制id字段的创建,即从这两个值中生成ObjectId的值-它仍然是唯一的值,不会降低性能,而且-该值不会是生成的随机值。

对此有什么想法吗?有什么想法吗?

更新:如果我想继续使用objectId作为_id字段,该怎么办?

对于objectId,只有12/24长的字符串是有效的。因此,我从这里得到了一个想法,并编写了这段代码(创建了一个24个字符长的哈希(:

import hashlib
from bson.objectid import ObjectId
the_string = "..............."
24_long_str = hex(int(hashlib.sha256(the_string.encode('utf-8')).hexdigest(), 16) % (10**28))[2:]
oid = ObjectId(24_long_str)

对这个代码有什么想法吗?性能问题?该值将唯一用作id吗?

如果断言value"加";origin是真正唯一的,那么只需从insert之前的两者构建_id_id不必自动生成,也必须是ObjectId类型。

var d = {
"value": "ABC",
"origin": "here",
"parent": "P"
};
// One possible format for combo of value + origin:
d['_id'] = d['value'] + "_" + d['origin'];
db.foo.insert(d);

相关内容

  • 没有找到相关文章

最新更新