2016-11-04 7 views
3

私は一意の電子メールで新しいアカウントを作成しようとしています。オプションの1つは、同じ電子メールを持つアカウントがすでに存在するかどうかを確認することです。存在しない場合は、新しいアカウントを作成します。項目を挿入するアトミシティ

このアプローチの問題は、これがアトミックに安全であるかどうかについてはわかりません。複数のユーザーが同じ電子メールで同時に新しいアカウントを作成しようとしている場合はどうなりますか?それは私のデータベースの一貫性を損なうでしょうか?


ユニークオプションについては、 スキーマタイプと聞いたことがあります。
代わりにそのオプションを使用する必要がありますか?
マングースを使用していますか?その他のオプション ?
上記のコードは悪い習慣とみなされますか?

答えて

3

これは、MongoDBではアトミックには安全ではありません。ただし、電子メールフィールドには一意のインデックスを使用できます。これにより、既に使用されている場合、または他の人がそれを同時に挿入した場合に挿入が失敗します。

シャーディングを使用する予定がある場合、ユニークなインデックスはシャードキーでのみサポートされているため、これが問題になる可能性があります。

+0

ユニークインデックスエラーを処理するにはどうすればよいですか?彼らの署名は何ですか?おそらく私はいくつかのドキュメンテーションを指摘しますか – rocketspacer

+2

エラーの種類は、データベースドライバによって異なる場合があります。私はmongooseがエラーをラップしないと思うので、 'MongoError:E11000重複キーエラーインデックス'を取得します。これは役立つかもしれません:https://github.com/Automattic/mongoose/issues/1225 – Erik

関連する問題