Trialcoder Trialcoder - 3 months ago 183
Node.js Question

E11000 duplicate key error index in mongodb mongoose

Following is my

user
schema in
user.js
model -

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;


This is how I am using it in my controller -

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


This is how I am saving it in the db -

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"});
}
});


Error -

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


I checked the db collection and no such duplicate entry exists, let me know what I am doing wrong ?

FYI -
req.body.email
and
req.body.password
are fetching values.

I also checked this post but no help STACK LINK

EDIT


If I removed completely then it inserts the document, otherwise it
throws error "Duplicate" error even I have an entry in the local.email

Answer

The error message is saying that there's already a record with null as the email. In other words, you already have a user without an email address.

The relevant documentation for this:

If a document does not have a value for the indexed field in a unique index, the index will store a null value for this document. Because of the unique constraint, MongoDB will only permit one document that lacks the indexed field. If there is more than one document without a value for the indexed field or is missing the indexed field, the index build will fail with a duplicate key error.

You can combine the unique constraint with the sparse index to filter these null values from the unique index and avoid the error.

unique indexes

Sparse indexes only contain entries for documents that have the indexed field, even if the index field contains a null value.

In other words, a sparse index is ok with multiple documents all having null values.

sparse indexes

Comments