Я провел много исследований, чтобы найти ответ на мою проблему, но я ничего не обнаружил. Не стесняйтесь прикреплять ссылку, если я пропустил ответ.
Я нашел это решение, но я не совсем уверен, как оно может быть применимо к этой ситуации: E11000 индекс ошибки дублирующегося ключа в mongodb mon goose
Я пытаюсь подключить мое приложение Express. js, MongoDB, Passport. js к Mon go -Atlas. Мой кластер Atlas настроен и принимает новых пользователей с моего локального хоста и использует Google Oauth 2.0, однако при попытке зарегистрироваться или войти в систему с помощью Facebook появляется следующая ошибка.
MongoError: E11000 duplicate key error collection: userDB.users index: username_1 dup key: { username: null }
Возможно это как-то связано с этим?
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
Он работал при подключении к моему локальному хосту MongoDB, и, как я уже говорил, у меня возникли проблемы с поиском решения.
passport.use(new FacebookStrategy({
clientID: process.env.FBAPPID,
clientSecret: process.env.FBSECRET,
callbackURL: "http://localhost:3000/auth/facebook/secrets"
},
function(accessToken, refreshToken, profile, cb) {
console.log(profile);
User.findOrCreate({ facebookId: profile.id }, function (err, user) {
return cb(err, user);
});
}
));
app.get('/auth/facebook', passport.authenticate('facebook'));
app.get('/auth/facebook/secrets',
passport.authenticate('facebook', { failureRedirect: '/login' }),
function(req, res) {
res.redirect('/secrets');
});
ОБНОВЛЕНИЕ
Итак, я нашел документацию по удалению индексов на MongoDB Однако это не совсем понятно, поэтому я также нашел статью Удаление существующих индексов Итак, я реализовал код в мое собственное приложение. js файл.
// Dropping an Index in MongoDB
User.collection.dropIndex({name : "username_1"}, function(err, res) {
if (err) {
console.log('Error in dropping index!', err);
}
});
Я перебрасывал базу данных между тестами, чтобы посмотреть, работает ли это, но я получаю эту ошибку все, независимо от того, как Я изменяю код, чтобы попытаться исправить его!
{ _bsontype: 'Timestamp', low_: 1, high_: 1586408833 },
ok: 0,
errmsg: `can't find index with key: { name: "username_1" }`,
code: 27,
codeName: 'IndexNotFound',
'$clusterTime': {
clusterTime: Timestamp { _bsontype: 'Timestamp', low_: 1, high_: 1586408833 },
signature: { hash: [Binary], keyId: [Long] }
},
name: 'MongoError',
[Symbol(mongoErrorContextSymbol)]: {}
}
И все же, когда я запускаю db.users.getIndexes()
в моей оболочке Mon go, подключенной к моему серверу Atlas. Конечно же, это так! Я даже попытался использовать dropIndexes
, и он только опустил индекс электронной почты! Я так расстроен этим!
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "userDB.users"
},
{
"v" : 2,
"key" : {
"email" : 1
},
"name" : "email_1",
"ns" : "userDB.users",
"background" : true
},
{
"v" : 2,
"unique" : true,
"key" : {
"username" : 1
},
"name" : "username_1",
"ns" : "userDB.users",
"background" : true
}
]