1. ホーム
  2. mongodb

[解決済み] mongoDB/mongoose: NULLでない場合は一意に決まる

2022-05-26 23:35:09

質問

コレクションのエントリを強制的に一意にする方法はないでしょうか? しかし、エントリがヌルでない場合のみ . 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' を取得するようで、email のないすべてのエントリは 'unique' オプションでクラッシュします (email のない別のユーザがいる場合)。

現在、私はアプリケーション レベルでそれを解決していますが、そのデータベース クエリを保存するのが大好きです。

thx

どのように解決するのですか?

MongoDB v1.8+ では、一意な値を確保しつつフィールドなしで複数のドキュメントを許可するという望ましい挙動を得るために sparse オプションを true に設定します。 というように。

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

殻の中も。

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

ユニークで疎なインデックスでは、まだ、複数のdocに email フィールドを持つ 価値 null 複数のドキュメントのみ なくしては アン email のフィールドを使用します。

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