首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果字段是唯一的,是否有插入文档的mongodb查询,否则执行自定义函数

如果字段是唯一的,是否有插入文档的mongodb查询,否则执行自定义函数
EN

Stack Overflow用户
提问于 2020-03-10 22:35:13
回答 1查看 44关注 0票数 0

正在尝试创建一个激活码,该激活码应该是唯一的,但它只由特定字符组成。所以,这是我构建的解决方案

代码语言:javascript
运行
复制
function findByActivationId() {
   return Activation
        .findOne({activationId})
        .lean()
        .exec();
}
let activationId = buildActivationId();
while (await findByActivationId(activationId)) {
    activationId = buildActivationId();
}

这会产生太多的db调用,有没有更好的方法来查询mongodb?

EN

回答 1

Stack Overflow用户

发布于 2020-03-10 23:23:02

好的,检查key是否唯一的主要问题是基于你如何创建它们。

为你选择最好的方法来避免以后的一大堆问题。

您自己生成的字符串作为键

嗯,你可以做到这一点,但是理解一些免责声明是很重要的

如果您希望通过代码生成自己的密钥,然后比较它在数据库中是否与当前创建的所有其他密钥是唯一的,则可以这样做。只需通过您的算法创建键,然后从数据库中选择所有键,并检查所选行的数组是否包含这个新创建的字符串

此解决方案的问题

正如我们所看到的,我们需要从DB中选择所有键,然后将每个键与新创建的键进行比较。当您的数据库存储大量数据时,可能会出现问题。每次应用程序必须“下载”大量数据,然后将其与新数据进行比较,因此这可能会产生一些冻结。

但是,如果您确定您的数据库将不会存储那么多的唯一行,那么使用它是很酷的。

那么正确地创建这些密钥就很重要了。现在我们讨论的是复杂性,创建key的符号更多,更难获得相同的符号。

我们可以看一下这个例子吗?

如果您基于字母a-z和数字1-9创建密钥,并且密钥的长度为例如5,则此密钥的复杂度为35^5,这会产生超过5200万个可能性。可以生成相同的密钥,但这就像彩票中奖一样,几乎不可能

然后你就可以检查生成的密钥是否真的是唯一的,如果不是。(哦,得了吧)重复。

其他方式

  1. 使用mongodb _id创建唯一密钥
  2. 使用UNIX时间戳创建唯一密钥
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60619815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档