如何在Python中为MongoDB生成随机_Id

问题描述 投票:0回答:2

在 MongoDB 上,出于某种原因,_Id 字段总是非常相似,如此相似,以至于在 20 个文档之后我无法插入更多文档,因为 _Id 是相同的。我认为正在发生的事情是 MongoDB 根据文档内部的内容生成 _Id,并且我插入的所有文档都非常相似(但不相同)。我想做的就是生成一个随机 _Id 来解决这个问题。

我首先尝试的是从列表中随机挑选垃圾和数字 24 次(因为 _Id 字段有 24 个字符长),这就是我的做法:

alphabet = string.ascii_letters + string.digits
key = ''.join(secrets.choice(alphabet) for i in range(24))

但这给了我一个

TypeError: unhashable type: 'slice'

还有其他方法生成随机_Id吗?

python mongodb pymongo
2个回答
1
投票

secrets.choice() 函数用于从序列(如列表或字符串)中选择单个随机元素,但您尝试将其应用于切片(序列的一部分)。要使用字母表中的字符生成特定长度的随机字符串,您可以像这样修改代码:

import string import secrets alphabet = string.ascii_letters + string.digits key = ''.join(secrets.choice(alphabet) for _ in range(24)) print(key)
这里,

for _ in range(24)

迭代
24次,并且在每次迭代中,从字母表中选择一个随机字符并将其添加到密钥字符串中。


0
投票
MongoDB 及其相关驱动程序和工具始终确保自动创建的

_id

 字段对于当前数据库是唯一的。出于所有合理的目的,您可以扩展该语句以表示生成的 
_id
 是全局唯一的。

如果你快速连续地创建它们,它们看起来会很相似;那是因为它们是由随机机器标识符组成的,添加当前日期。至关重要的是,总有一个递增的 3 字节计数器。因此,除非您每秒添加超过 1600 万条记录,否则不会遇到任何重复记录。

© www.soinside.com 2019 - 2024. All rights reserved.