正在尝试创建一个激活码,该激活码应该是唯一的,但它只由特定字符组成。所以,这是我构建的解决方案
function findByActivationId() {
return Activation
.findOne({activationId})
.lean()
.exec();
}
let activationId = buildActivationId();
while (await findByActivationId(activationId)) {
activationId = buildActivationId();
}
这会产生太多的db调用,有没有更好的方法来查询mongodb?
发布于 2020-03-10 23:23:02
好的,检查key是否唯一的主要问题是基于你如何创建它们。
为你选择最好的方法来避免以后的一大堆问题。
您自己生成的字符串作为键
嗯,你可以做到这一点,但是理解一些免责声明是很重要的
如果您希望通过代码生成自己的密钥,然后比较它在数据库中是否与当前创建的所有其他密钥是唯一的,则可以这样做。只需通过您的算法创建键,然后从数据库中选择所有键,并检查所选行的数组是否包含这个新创建的字符串
此解决方案的问题
正如我们所看到的,我们需要从DB中选择所有键,然后将每个键与新创建的键进行比较。当您的数据库存储大量数据时,可能会出现问题。每次应用程序必须“下载”大量数据,然后将其与新数据进行比较,因此这可能会产生一些冻结。
但是,如果您确定您的数据库将不会存储那么多的唯一行,那么使用它是很酷的。
那么正确地创建这些密钥就很重要了。现在我们讨论的是复杂性,创建key的符号更多,更难获得相同的符号。
我们可以看一下这个例子吗?
如果您基于字母a-z和数字1-9创建密钥,并且密钥的长度为例如5,则此密钥的复杂度为35^5,这会产生超过5200万个可能性。可以生成相同的密钥,但这就像彩票中奖一样,几乎不可能
然后你就可以检查生成的密钥是否真的是唯一的,如果不是。(哦,得了吧)重复。
其他方式
https://stackoverflow.com/questions/60619815
复制相似问题