[解決済み】E11000重複キーエラー mongodb mongooseのインデックス
質問
以下は、私の
user
のスキーマは
user.js
モデル
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');
このようにして、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"});
}
});
エラー -
{"name":"MongoError","code":11000,"err":"insertDocument :: caused by :: 11000 E11000 duplicate key error index: mydb.users.$email_1 dup key: { : null }"}
私はdbコレクションをチェックし、そのような重複したエントリが存在しない。
参考までに-。
req.body.email
と
req.body.password
は値を取得しています。
この記事もチェックしましたが、役に立ちませんでした。 スタックリンク
完全に削除すると挿入されますが、そうでなければ、local.emailにエントリがあっても、エラー"Duplicate"をスローします。
解決するには?
を持つレコードがすでに存在するというエラーメッセージが表示されます。
null
を電子メールとして使用します。つまり、Eメールアドレスのないユーザがすでに存在することになります。
そのための関連ドキュメントです。
もしドキュメントがユニークインデックスでインデックスされたフィールドの値を持っていない場合、インデックスはこのドキュメントのヌル値を格納します。一意制約があるので、MongoDB はインデックス付きフィールドを欠いたドキュメントをひとつだけ許可します。インデックス対象フィールドの値がない、あるいはインデックス対象フィールドがないドキュメントが複数ある場合は、重複キーエラーでインデックスの構築に失敗します。
一意制約とスパースインデックスを組み合わせることで、一意インデックスからこれらのNULL値をフィルタリングし、エラーを回避することができます。
スパースインデックスは、インデックスフィールドがNULL値を含んでいても、インデックスされたフィールドを持つドキュメントのエントリのみを含む。
言い換えれば、スパースインデックスは、複数の文書がすべて
null
の値を指定します。
コメントより
あなたのエラーは、キーの名前が
mydb.users.$email_1
の両方にインデックスがあるのでは?
users.email
と
users.local.email
(前者は古くて今は使われていない)。Mongoose モデルからフィールドを削除しても、データベースには影響しません。でチェックします。
mydb.users.getIndexes()
で不要なインデックスを手動で削除してください。
mydb.users.dropIndex(<name>)
.
関連
-
[解決済み] テスト
-
[解決済み】「安全なTLS接続が確立される前にクライアントのネットワークソケットが切断されました」(ノード10
-
[解決済み】"npm update -g" の後に "Cannot find module 'npmlog'" というエラーが発生する。
-
[解決済み】E11000重複キーエラー mongodb mongooseのインデックス
-
[解決済み] create-react-app、インストールエラー("コマンドが見つからない")。
-
[解決済み] AWS lambda function error - Unable to import module 'index': エラー
-
[解決済み] Heroku "状態が起動から停止に変更されました SIGTERMで全プロセスを停止"
-
[解決済み] nodejs - http.requestでresponse.writeを使用する場合、第一引数は文字列またはBufferでなければなりません。
-
[解決済み] nvm は npm config の "prefix" オプションと互換性がありません。
-
[解決済み] Express.js req.bodyが未定義です。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「安全なTLS接続が確立される前にクライアントのネットワークソケットが切断されました」(ノード10
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み】エラーです。EACCES: 権限が拒否されました、アクセス '/usr/local/lib/node_modules' 。
-
[解決済み】POSTできない/expressを使用するとエラーが発生する
-
[解決済み] AWS s3 api error: specified bucket does not exist.
-
[解決済み] S3 Bucket に何かを送信しようとすると、AWS Missing credentials が表示される (Node.js)
-
[解決済み] ランタイム 'node' が PATH で見つからない - Visual Studio Code と Node.js
-
[解決済み] node.jsのセットアップウィザードが途中で終了してしまう
-
[解決済み] バルク更新を行う。
-
[解決済み] Mongoose Schema がモデルとして登録されていません。