Tôi cũng vừa gặp vấn đề này. Tôi muốn một giá trị là null hoặc là duy nhất. Vì vậy, tôi đặt cả unique
và sparse
cờ:
var UserSchema = new Schema({
// ...
email: {type: String, default: null, trim: true, unique: true, sparse: true},
// ...
});
Và, tôi đảm bảo rằng cơ sở dữ liệu đã thực sự tạo chỉ mục chính xác với db.users.getIndexes();
{
"v" : 1,
"key" : {
"email" : 1
},
"unique" : true,
"ns" : "test.users",
"name" : "email_1",
"sparse" : true,
"background" : true,
"safe" : null
},
(Vì vậy, đây không giống như sự cố ở đây: lỗi khóa trùng lặp trường mongo _id )
Lỗi của tôi là đặt default
giá trị thành null
. Theo một nghĩa nào đó, Mongoose tính một null
rõ ràng như một giá trị phải là duy nhất. Nếu trường không bao giờ được xác định (hoặc undefined
) thì nó không được thực thi để trở thành duy nhất.
email: {type: String, trim: true, unique: true, sparse: true},
Vì vậy, nếu bạn cũng đang gặp sự cố này, hãy đảm bảo rằng bạn không đặt giá trị mặc định và đảm bảo rằng bạn không đặt giá trị thành null
bất kỳ nơi nào khác trong mã của bạn. Thay vào đó, nếu bạn cần đặt nó một cách rõ ràng, hãy đặt nó thành undefined
(hoặc một giá trị duy nhất).