mongoDB/mongoose: null でない場合は一意 質問する

mongoDB/mongoose: null でない場合は一意 質問する

ユニークなコレクションエントリを強制する方法があるかどうか疑問に思っていましたただし、エントリがnullでない場合のみ.e サンプルスキーマ:

var UsersSchema = new Schema({
    name  : {type: String, trim: true, index: true, required: true},
    email : {type: String, trim: true, index: true, unique: true}
});

この場合、「email」は必須ではありませんが、「email」が保存される場合は、このエントリが(データベース レベルで)一意であることを確認する必要があります。

空のエントリは値「null」を取得するようです。そのため、電子メールのないすべてのエントリは、「一意」オプションでクラッシュします (電子メールのない別のユーザーがいる場合)。

現在はアプリケーション レベルで解決していますが、その DB クエリを保存したいと考えています。

THX

ベストアンサー1

MongoDB v1.8+ 以降では、インデックスを定義するときにオプションを true に設定することで、一意の値を確保しながらフィールドのない複数のドキュメントを許可するという望ましい動作を実現できますsparse。次のようにします。

email : {type: String, trim: true, index: true, unique: true, sparse: true}

またはシェルで:

db.users.ensureIndex({email: 1}, {unique: true, sparse: true});

Note that a unique, sparse index still does not allow multiple docs with an email field with a value of null, only multiple docs without an email field.

See http://docs.mongodb.org/manual/core/index-sparse/

おすすめ記事