MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Chỉ mục thưa thớt duy nhất của Mongodb

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ả uniquesparse 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).




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để bật ReadConcernMajority trong MongoDB 3.6.3?

  2. Mongo và Node.js:Tìm tài liệu bằng _id sử dụng UUID (GUID)

  3. Thêm Trình xác thực mới vào Bộ sưu tập hiện có

  4. Tại sao mongodb được đặt lại sau khi đẩy sang openshift

  5. Làm thế nào để chèn cùng một ngày trong mongodb khi đọc từ Chuỗi thông qua java?