マングース-ユニーク-バリデーター
このプラグインの使用方法:
1)npm install --save mongoose-unique-validator
2)スキーマでは、次のガイドに従ってください。
var mongoose = require('mongoose');
var uniqueValidator = require('mongoose-unique-validator');
exampleSchema.plugin(uniqueValidator);
3)マングースの方法
次のようなメソッドを使用するfindOneAndUpdate
場合は、次の構成オブジェクトを渡す必要があります。
{ runValidators: true, context: 'query' }
ie. User.findOneAndUpdate(
{ email: 'old-email@example.com' },
{ email: 'new-email@example.com' },
{ runValidators: true, context: 'query' },
function(err) {
}
4)追加オプション
大文字小文字を区別しません
スキーマでuniqueCaseInsensitiveオプションを使用します
ie. email: { type: String, index: true, unique: true, required: true, uniqueCaseInsensitive: true }
カスタムエラーメッセージ
ie. exampleSchema.plugin(uniqueValidator, { message: 'Error, expected {PATH} to be unique.' });
これで、mongoの再起動、データベースの削除、インデックスの作成について心配することなく、スキーマに一意のプロパティを追加/削除できます。
警告(ドキュメントから):
ドキュメントがデータベースに存在するかどうかを確認するために非同期操作に依存しているため、2つのクエリを同時に実行し、両方とも0を取得してから、両方ともMongoDBに挿入することができます。
コレクションを自動的にロックするか、単一の接続を強制する以外に、実際の解決策はありません。
ほとんどのユーザーにとって、これは問題にはなりませんが、注意すべきエッジケースです。