当前位置: 首页 > 知识库问答 >
问题:

E11000 mongodb mongoose中重复密钥错误索引

空浩淼
2023-03-14

下面是user.js模型中的user架构-

var userSchema = new mongoose.Schema({
    local: {
        name: { type: String },
        email : { type: String, require: true, unique: true },
        password: { type: String, require:true },
    },
    facebook: {
        id           : { type: String },
        token        : { type: String },
        email        : { type: String },
        name         : { type: String }
    }
});

var User = mongoose.model('User',userSchema);

module.exports = User;

这就是我在控制器中使用它的方式-

var user = require('./../models/user.js');

我就是这样把它保存在数据库里的-

user({'local.email' : req.body.email, 'local.password' : req.body.password}).save(function(err, result){
    if(err)
        res.send(err);
    else {
        console.log(result);
        req.session.user = result;
        res.send({"code":200,"message":"Record inserted successfully"});
    }
});

错误-

{"name":"MongoError","code":11000,"err":"insertDocument :: caused by :: 11000 E11000 duplicate key error index: mydb.users.$email_1  dup key: { : null }"} 

我检查了数据库集合,没有这样的重复条目存在,让我知道我做错了什么?

FYI-req.body.emailreq.body.password正在获取值。

我也检查了这篇文章,但没有帮助堆栈链接

如果我完全删除,它就插入文档,否则它会抛出错误“重复”错误,即使我在local.email中有一个条目

共有3个答案

杨豪
2023-03-14

检查集合索引。

由于字段集合中索引过时,我出现了这个问题,这些字段应该由不同的新路径存储。

当您指定字段为唯一时,Mongoose会添加索引。

蓟浩旷
2023-03-14

如果您还在开发环境中,我将删除整个数据库,重新使用新的模式。

从命令行

➜ mongo
use dbName;
db.dropDatabase();
exit
解高昂
2023-03-14

错误消息表示已经有一个以null作为电子邮件的记录。换句话说,您已经有了一个没有电子邮件地址的用户。

与此相关的文件:

如果文档在唯一索引中没有索引字段的值,则索引将为此文档存储一个空值。由于unique约束,MongoDB将只允许一个缺少索引字段的文档。如果有多个文档没有索引字段的值或缺少索引字段,则索引生成将失败,并出现重复键错误。

您可以将unique约束与稀疏索引结合起来,从unique索引中筛选出这些空值并避免错误。

唯一索引

稀疏索引仅包含具有索引字段的文档的条目,即使索引字段包含空值。

换句话说,稀疏索引对于多个都具有null值的文档是可以的。

稀疏索引

来自备注:

您的错误显示键名为mydb.users.$email_1,这使我怀疑您对users.emailusers.local.email都有索引(前者已经旧了,目前没有使用)。从Mongoose模型中删除字段不会影响数据库。如果是这种情况,请使用mydb.users.getindexes()进行检查,并使用mydb.users.dropindex( ) 手动删除不需要的索引。

 类似资料:
  • 我在一个djs机器人工作,我遇到了一个错误,我不知道如何修复我已经看了https://docs.mongodb.com/manual/indexes/和NodeJs,摩卡和猫鼬,但似乎没有什么帮助这里是信息- 错误发生在这里- 这是我的服务器模型/服务器架构- 最后,这是我得到的错误-

  • MongoError:E11000重复密钥错误集合:myFirstDatabase。tours索引:rating_1 dup键:{rating:null} 当我使用postman创建数据时,我不理解这个错误,说dup key:{rating:null},在shcema中没有任何评级键,这是从哪里来的?为什么我只能创作一次。 这是我的代码(tourSchema) 这是我试图添加的数据 }

  • 出于某种原因,我的应用程序不允许我创建多个配置文件。下面是服务文件中的设置: //这将查找配置文件(如果存在) //如果一个不存在的话,应该创建一个 它适用于第一个用户,但当我创建另一个用户时,我会得到错误:{“error”:{“message”:“MongoError:E11000重复键错误集合:TownMiner.profiles index:info.subs_1 dup key:{info

  • 问题内容: 我正在尝试将大量用户列表插入MySQL数据库,但是每次尝试都出现错误: 之所以这样,是因为第二列在很多条目上都是空白的,因此在第二列中插入一个空白条目后,就不会再添加另一个了。但是,当我昨天添加了大多数列表时,即使昨天添加的很多条目在第2列中也有一个空白单元格,我也没有一次收到此错误。这是怎么回事? 这是插入1个条目的sql代码。其余的遵循相同的格式: 问题答案: 除了Sabeen的答

  • 我试图实现WebSocket与PHP。在我的台式电脑上,它工作正常。但是当我试图在Android设备上打开我的网站时。我的服务器实现在握手时给出了下面的错误。 未定义索引:Sec WebSocket键 然后我检查了值。当我用我的台式电脑浏览器连接到网站时,Header在头中包含Sec-WebSocket-Key索引。但当我从Android设备连接到网站时,Header包含Sec-WebSocket