gpt4 book ai didi

mongodb - E11000 重复键错误索引 : MongoDb unusual error

转载 作者:IT老高 更新时间:2023-10-28 13:16:17 26 4
gpt4 key购买 nike

我有一个简单的“用户”集合,现在我只有 2 个文档。

{
"_id": ObjectId("4ef8e1e41d41c87069000074"),
"email_id": {
"0": 109,
"1": 101,
"2": 64,
"3": 97,

{
"_id": ObjectId("4ef6d2641d41c83bdd000001"),
"email_id": {
"0": 109,
"1": 97,
"2": 105,
"3": 108,

现在,如果我尝试在 email_id 字段上使用 {unique: true} 创建一个新索引,mongodb 会用“E11000 重复键错误索引:db.users.$email_id 重复键:{ : 46 }”来提示我。即使在指定 {dropDups: true} 后我也会收到同样的错误,但我认为这里不是这种情况,因为两个文档都存储了不同的电子邮件 ID。

我不确定这里发生了什么,任何指针将不胜感激。

编辑:文档的完整 View :

{
"_id": ObjectId("4ef8e1e41d41c87069000074"),
"email_id": {
"0": 109,
"1": 101,
"2": 64,
"3": 97,
"4": 98,
"5": 104,
"6": 105,
"7": 110,
"8": 97,
"9": 118,
"10": 115,
"11": 105,
"12": 110,
"13": 103,
"14": 104,
"15": 46,
"16": 99,
"17": 111,
"18": 109
}
}

{
"_id": ObjectId("4ef6d2641d41c83bdd000001"),
"email_id": {
"0": 109,
"1": 97,
"2": 105,
"3": 108,
"4": 115,
"5": 102,
"6": 111,
"7": 114,
"8": 97,
"9": 98,
"10": 104,
"11": 105,
"12": 110,
"13": 97,
"14": 118,
"15": 64,
"16": 103,
"17": 109,
"18": 97,
"19": 105,
"20": 108,
"21": 46,
"22": 99,
"23": 111,
"24": 109
}
}

还有几个字段,例如“display_name”、“registered_since”等,我从上面的显示中省略了(我认为它们在引发的错误中没有任何作用,如果你仍然需要它们,我可以可能会将整个文档粘贴在这里)

我正在使用 erlang mongodb driver用于与我的 mongo 实例通信。可以看到的所有字段都保存为二进制字节,这就是为什么您在文档中看到如此奇怪的 email_id 的原因。

注意:二进制字节格式不是由我的代码逻辑强制的,我在我的 bson 文档中非常传递字符串 email_id,但我最终总是将我的数据视为二进制字节。 (可能是因为 erlang mongodb 驱动程序是如何编写的,我并没有对此进行真正的调查,因为我的 find()、find_one() 和其他查询即使将字段保存为二进制字节也能按预期工作)

编辑:> db.users.findOne()

{
"_id" : ObjectId("4ef6d2641d41c83bdd000001"),
"email_id" : [
109,
97,
105,
108,
115,
102,
111,
114,
97,
98,
104,
105,
110,
97,
118,
64,
103,
109,
97,
105,
108,
46,
99,
111,
109
],
"display_name" : [
65,
98,
104,
105,
110,
97,
118,
43,
83,
105,
110,
103,
104
],
"provider" : [
106,
97,
120,
108,
46,
105,
109
],
"provider_id" : [ ]
}

最佳答案

当 MongoDB 索引一个数组字段时,它实际上索引了数组中的各个元素。这是为了有效地支持查找数组特定元素的查询,例如:

db.users.find({email_id: 46})

由于这 email_id (46) 存在于两个文档中,因此您的唯一索引中有重复的键。

如果您设置了 dropDups: true,我不确定为什么会出现此错误...您能否展示一个代码示例,说明您如何调用 createIndex?您还应该尝试 dropDups: 1,因为 MongoDB 在这种情况下错误地对待 1true (参见 https://jira.mongodb.org/browse/SERVER-4562 )。

关于mongodb - E11000 重复键错误索引 : MongoDb unusual error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8639212/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com