javascript - MongoError: E11000 duplicate key error collection with passport -
i have following userschema
var mongoose = require("mongoose"), passportlocalmongoose = require("passport-local-mongoose"); var userschema = new mongoose.schema({ email: string, password: string, username: string, fname: string, lname: string, usertype: number, subscribedthreads: [ { type: mongoose.schema.types.objectid, ref: "threads" } ] }); // add passport methods userschema.plugin(passportlocalmongoose); // export modules used file requiring module.exports = mongoose.model("users",userschema); the first entry collection occurs should next ones give
{ [mongoerror: e11000 duplicate key error collection: kmanv3.users index: username_1 dup key: { : null }] name: 'mongoerror', message: 'e11000 duplicate key error collection: kmanv3.users index: username_1 dup key: { : null }', driver: true, code: 11000, index: 0, errmsg: 'e11000 duplicate key error collection: kmanv3.users index: username_1 dup key: { : null }', getoperation: [function], tojson: [function], tostring: [function] } also, dbname.users.getindexes() gives:
> db.users.getindexes() [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "kmanv3.users" }, { "v" : 1, "key" : { "password" : 1 }, "name" : "password_1", "ns" : "kmanv3.users", "background" : true }, { "v" : 1, "unique" : true, "key" : { "username" : 1 }, "name" : "username_1", "ns" : "kmanv3.users", "background" : true } ] apparently every property of schema has been set unique , can't add data collections if data totally different. i'm not sure if it's due integration of passport.
looking @ options passport-local-mongoose:
usernamefield: specifies field name holds username. defaults 'username'.
usernameunique : specifies if username field should enforced unique mongodb index or not. defaults true.
which explains why collection has unique index on (non-existent-in-your-schema) username field.
if don't set field in documents add database, mongodb use null, , once first document has been inserted, subsequent document (also field value null username) throw e11000 error.
so first, remove index on username (and password, assume once marked field unique in schema), , set proper field name passport-local-mongoose use:
userschema.plugin(passportlocalmongoose, { usernamefield : 'username' }); (or email, if want field used unique user identifier)
Comments
Post a Comment