只是为了检查这是否可能以及是否值得麻烦:
我使用的是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);