私もこの問題を抱えていました。値をnullまたは一意にする必要がありました。そこで、両方のunique
を設定しました およびsparse
フラグ:
var UserSchema = new Schema({
// ...
email: {type: String, default: null, trim: true, unique: true, sparse: true},
// ...
});
そして、データベースが実際にdb.users.getIndexes();
を使用してインデックスを正しく作成したことを確認しました。
{
"v" : 1,
"key" : {
"email" : 1
},
"unique" : true,
"ns" : "test.users",
"name" : "email_1",
"sparse" : true,
"background" : true,
"safe" : null
},
(つまり、これはではありません ここでの問題と同じ:mongo_idフィールドの重複キーエラー )
私の間違いはdefault
を設定することでした null
への値 。ある意味で、Mongooseは明示的なnull
をカウントします 一意である必要がある値として。フィールドが定義されていない場合(またはundefined
)その場合、一意であることが強制されません。
email: {type: String, trim: true, unique: true, sparse: true},
したがって、この問題も発生している場合は、デフォルト値を設定していないことと、値をnull
に設定していないことを確認してください。 コード内の他の場所でも。代わりに、明示的に設定する必要がある場合は、undefined
に設定してください (または一意の値)。