MongoError: E11000 重复键错误索引
Posted
技术标签:
【中文标题】MongoError: E11000 重复键错误索引【英文标题】:MongoError: E11000 duplicate key error index 【发布时间】:2017-03-02 18:55:48 【问题描述】:我的数据库架构是
var Account = new Schema(
email : String,
name : String ,
family : String ,
password : String
);
我想使用电子邮件和密码进行护照身份验证。我的代码是:
var LocalStrategy = require('passport-local').Strategy;
passport.use('register', new LocalStrategy(
usernameField: 'email',
passwordField: 'password',
passReqToCallback : true
,
function(req, email, password, done)
Account.findOne( 'email' : email , function(err, user)
if (err)
return done(err);
else
var newaccount = new Account();
newaccount.password = bcrypt.hashSync(req.body.password);
newaccount.email = req.body.email;
newaccount.name = req.body.name;
newaccount.family = req.body.family;
// save the user
newaccount.save(function(err)
if (err)
console.log('Error in Saving user: '+err);
throw err;
);
虽然我在
中没有任何用户名字段MongoError: E11000 duplicate key error index: Account.accounts.$username_1 dup key: : null
我第一次可以插入数据库并且我没有任何错误但是第二次我有这个错误我认为它假设用户名作为键并且第一次它将用户名设置为空所以第二次它由于重复键,想尝试将用户名设置为空抛出错误。我在互联网上搜索了很多。我删除了数据库并使用了db.Account.dropIndexes()
,但问题没有解决。
【问题讨论】:
这与此处发布的问题相同。 ***.com/questions/24430220/… 将使用的集合是accounts
,而不是Account
。
E11000 duplicate key error index in mongodb mongoose的可能重复
这里已经回答了https://***.com/questions/24430220/e11000-duplicate-key-error-index-in-mongodb-mongoose?rq=1
【参考方案1】:
错误消息是因为用户名为 null 的记录已经存在。您的用户名字段为空值。Mongo 将只允许一个索引字段为空值。如果有多个文档没有索引字段的值或缺少索引字段,则索引构建将失败并显示重复键错误。您可以使用稀疏索引。
只需删除空文档。
使用 mydb.users.getIndexes() 检查您可以使用 mydb.users.dropIndex() 手动删除不需要的索引
【讨论】:
以上是关于MongoError: E11000 重复键错误索引的主要内容,如果未能解决你的问题,请参考以下文章
MongoError:E11000 重复键错误集合:annka.transactions 索引:assets_1 重复键::null
MongoError:E11000 重复键错误集合:myFirstDatabase.tours 索引:rating_1 重复键: rating:null
我该如何修复(节点:14352)UnhandledPromiseRejectionWarning:MongoError:E11000 重复键错误集合:错误?
Node.js MongoError: E11000 重复键错误集合:
MongoError:E11000 重复键错误集合:workflow.compnies 索引:username_1 dup key: username:null