Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果我不敏感地比较mongodb Ids案例,是否会出现冲突问题?_Mongodb_Email_Meteor - Fatal编程技术网

如果我不敏感地比较mongodb Ids案例,是否会出现冲突问题?

如果我不敏感地比较mongodb Ids案例,是否会出现冲突问题?,mongodb,email,meteor,Mongodb,Email,Meteor,我在mongodb数据库中收集了一个meteor应用程序的电子邮件令牌,我将这些电子邮件令牌粘贴在电子邮件的回复地址(例如@example.com)中,这样当我解析它时,我就知道它与什么有关 我遇到的问题是,电子邮件令牌使用默认的_id算法生成唯一的id,该算法生成的字符串是大小写字符的混合体 然而,我发现一些电子邮件客户端会将整个回复地址小写,这意味着我只能毫无意识地识别地址大小写 我想现在我有两个选择 1) 最简单的选择是不敏感地将电子邮件令牌与回复地址大小写匹配。在这方面发生冲突的可能性有

我在mongodb数据库中收集了一个meteor应用程序的电子邮件令牌,我将这些电子邮件令牌粘贴在电子邮件的回复地址(例如@example.com)中,这样当我解析它时,我就知道它与什么有关

我遇到的问题是,电子邮件令牌使用默认的_id算法生成唯一的id,该算法生成的字符串是大小写字符的混合体

然而,我发现一些电子邮件客户端会将整个回复地址小写,这意味着我只能毫无意识地识别地址大小写

我想现在我有两个选择

1) 最简单的选择是不敏感地将电子邮件令牌与回复地址大小写匹配。在这方面发生冲突的可能性有多大


2) 将电子邮件令牌设置为某种guid,并生成独立于mongodb ID创建的guid。

Meteor正在生成自己的ID,该ID与mongodb ObjectId不同。如前所述,在转换大小写或不敏感地检查大小写时,它们可能会发生冲突。这很有趣,我不确定这个项目的原因

但是,在引擎盖下面是mongodb节点本机驱动程序。因此,如果您想使用ObjectId创建函数,它们应该是可用的

重要的部分在于这些呼吁:

value.toString(16)
因此,这里的基数设置为16,表示十六进制或所有字符0-9a-f

您还可以在驱动程序中注意到,他们将按如下方式进行正则表达式检查:

^[0-9a-fA-F]{24}$
因此,案件敏感性似乎不是一个问题

不过,如果您想使用其他方法,文档中有一节可以作为有用的指南


是的,您会遇到问题。Meteor在其17个字符的id值中使用大小写值。您可以查看
Random
包中的代码:

因此,有可能得到两个不同的值,它们之间的差异仅限于大小写。如果客户端的电子邮件应用程序将地址转换为小写字符,则可能会导致混淆

在您的情况下,最好不要使用
Random.id()
,而是创建自己的随机字符生成器。类似的方法可能会奏效:

var lowerCaseId = function() {
    var digits = [],
        self = this;

    for (var i = 0; i < 17; i++) {
        digits[i] = Random.choice("23456789abcdefghijkmnopqrstuvwxyz");
    }
    return digits.join("");
};
var lowerCaseId=function(){
变量位数=[],
self=这个;
对于(变量i=0;i<17;i++){
数字[i]=随机选择(“23456789abcdefghijkmnopqrstuvwxyz”);
}
返回数字。连接(“”);
};
同样值得注意的是meteor
\u id
值是由“不可接受的字符”组成的-没有任何字符会导致混淆,例如0与O、1与I等

如果未在
\u id
字段中使用它,则必须使用它生成一个值,并在插入该值或为其使用唯一索引之前检查该值在数据库中是否不存在


此外,还应注意熵会显著降低,因为可能的组合数量会随着大写字符的丢失而减少。如果这对您很重要,您可以将上述代码中的位数从17增加。

这不适用于使用meteor生成的
\u id
,因为它们不是十六进制(0-9a-fA-F)。它们将由完整的字母表组成,没有不可混淆的字符。@Akshat[Facepalm]完全没有看到流星部分。你说的完全正确。我只是生成一个UUID而不是创建自己的函数不是更好吗?你可以!但是UUID是十六进制的,因此如果每个数字中有16个可能的字符,那么需要更多的字符来弥补相同数量的数据。我提到了定制方法,因为它根据您的用例提供了更多的灵活性。但在我们的情况下,更多的信件不是问题