Chỉ mục duy nhất hợp chất mongodb
Ngay cả các thư viện phổ biến như Mongoose cũng tạo các chỉ mục duy nhất dưới mui xe để thực thi các xác thực duy nhất trên các bộ sưu tập Mongo Show
Làm thế nào để một chỉ mục duy nhất hoạt động dưới mui xe?Một chỉ mục duy nhất đảm bảo rằng một giá trị nhất định chỉ có thể được lưu trữ một lần cho một trường nhất định. Bất cứ khi nào bạn tạo một bộ sưu tập trong Mongo, một chỉ mục duy nhất sẽ tự động được tạo trên trường _id. Đây là điều đảm bảo rằng không có hai tài liệu nào có cùng _id được lưu trữ Một chỉ mục duy nhất được thực thi trước, trong và sau khi tạo Nếu bạn có dữ liệu hiện có trong một bộ sưu tập không phải là duy nhất cho một trường nhất định thì bạn sẽ gặp lỗi DuplicateKey khi tạo chỉ mục ngay từ đầu Điều này bao gồm sự vắng mặt của trường mục tiêu. Nếu một tài liệu trong bộ sưu tập của bạn bị thiếu trường x và bạn tạo một chỉ mục duy nhất trên x thì bạn không thể thêm tài liệu mới bỏ qua trường x. Điều này là do thiếu x trên hai tài liệu không phải là duy nhất Sử dụng cùng một khái niệm này, bạn có thể đảm bảo tính duy nhất trên các lĩnh vực khác. Những thứ như email, tên người dùng, thẻ tín dụng, SSN, số điện thoại đều là những ứng cử viên sáng giá cho tính duy nhất Làm cách nào để tạo một chỉ mục duy nhất trong MongoDB?Tạo một chỉ mục duy nhất yêu cầu đặt cờ duy nhất thành true db.people.createIndex({email:1}, {unique:true}) Lưu ý cách {duy nhất. true} là một tùy chọn được chỉ định khi tạo bất kỳ chỉ mục nào Bây giờ nếu bạn cố gắng thêm hai tài liệu có cùng giá trị cho email, bạn sẽ gặp lỗi Khóa trùng lặp Lưu ý rằng nếu bộ sưu tập của bạn đã có các giá trị trùng lặp cho một trường mà bạn đang cố gắng tạo một chỉ mục duy nhất trên đó, nó cũng sẽ báo lỗi Mặc dù ví dụ này minh họa việc thêm cờ duy nhất vào một chỉ mục trường đơn, nhưng bạn cũng có thể tạo một chỉ mục phức hợp duy nhất db.getCollection('people').createIndex({email:1,user:1}, {unique:true}) Bây giờ nếu bạn cố gắng chèn hai tài liệu có cùng giá trị cho email VÀ người dùng, bạn sẽ gặp lỗi Khóa trùng lặp Trong MongoDB index hỗ trợ thực hiện các câu hỏi hiệu quả hơn. Nếu không có chỉ mục, MongoDB sẽ phải duyệt tất cả các tài liệu trong một bộ sưu tập để tìm ra những tài liệu phù hợp với điều kiện truy vấn. Nếu tồn tại một chỉ mục, MongoDB có thể sử dụng nó để giới hạn số lượng tài liệu mà nó phải kiểm tra Các chỉ mục là một cấu trúc đặc biệt lưu trữ một phần nhỏ của bộ sưu tập, nó sẽ lưu giá trị của một trường hoặc một tập tin các trường được đánh chỉ mục và sắp xếp chúng theo giá trị của trường Với việc lưu trữ các chỉ mục và sắp xếp chúng, giúp MongoDB nhanh chóng tìm được khoảng mà nó cần tìm (khoảng xanh). Từ các chỉ mục được tìm thấy có thể nhanh chóng truy xuất đến tài liệu được lưu trữ trong cơ sở dữ liệu MongoDB Các loại chỉ mục trong MongoDBMongoDB cung cấp một số loại chỉ mục khác nhau để hỗ trợ các kiểu dữ liệu và câu truy vấn khác nhau Trường đơnChỉ mục trên một trường duy nhất. Mặc định MongoDB set single field index on _id. Thứ tự sắp xếp chỉ mục trong trường đơn không quan trọng vì mongodb có thể đi từ 2 hướng đầu đến cuối và ngược lại chỉ số hợp chấtMongoDB cũng hỗ trợ đánh chỉ mục trên nhiều trường. Lưu ý thứ tự của các trường được đánh index điều có ý nghĩa. Ví dụ như chỉ số phức hợp {name. 1, người dùng. -1}, MongoDB đầu tiên sẽ sắp xếp chỉ mục theo tên , sau đó với các tên có cùng giá trị tiến hành sắp xếp theo userid. chỉ mục đa phímMongoDB sử dụng multikey index để lập chỉ mục các nội dung là mảng. Nếu bạn đánh chỉ mục trên trường là mảng thì MongoDB sẽ tạo các chỉ mục riêng biệt cho tất cả các phần tử trong mảng Multikey index cho phép truy vấn chọn các tài liệu bằng cách khớp với một hoặc nhiều phần tử trong mảng Lưu ý Multikey index is mongodb tự động thiết lập khi bạn đánh index trên trường có data array. You don't need todeficit anything mục lục văn bảnChỉ mục văn bản hỗ trợ tìm kiếm các nội dung có kiểu chuỗi dữ liệu trong bộ sưu tập. Chỉ mục văn bản không lưu trữ ngôn ngữ (vn, en, v.v.) mà chỉ lưu các từ gốc Thuộc tính chỉ mụcchỉ mục duy nhấtThuộc tính chỉ mục duy nhất chắc chắn rằng sẽ không có giá trị trùng lặp trên các trường được đánh chỉ mục duy nhất Chỉ mục thưa thớtChỉ mục thưa thớt chỉ lưu trữ tài liệu có dữ liệu tại trường được lập chỉ mục ngay cả khi nó có giá trị null. Nếu bạn không thêm trường được đánh chỉ mục thưa thớt khi chèn, nó sẽ bỏ qua. Bạn có thể kết hợp chỉ mục thưa thớt với chỉ mục duy nhất để ngăn chặn việc thêm dữ liệu trùng lặp và có thể bỏ qua khi field được index không được thêm vào khi insert. Ví dụ trong cầy mangut const UserSchema = mongoose.Schema({ email: { type: String, sparse: true, unique: true, }); await new UserModel().save() await new UserModel().save() or await new UserModel({email: "email 1"}).save() await new UserModel({email: "email 2"}).save() Trường hợp dưới đây các bạn sẽ gặp lỗi Bộ sưu tập lỗi khóa trùng lặp E11000 . await new UserModel({email: null}).save() await new UserModel({email: null}).save() Như đã đề cập ở trên, chỉ số thưa thớt sẽ lưu ngay cả khi giá trị là null . Nên khi bạn . Nên khi bạn save() cả 2 User is null thì sẽ bị lỗi trùng lặp dữ liệu chỉ số TTLTTL index là một loại chỉ mục đặc biệt trong MongoDB tự động xóa tài liệu trong bộ sưu tập sau một thời gian được định sẵn. Chỉ mục TTL phù hợp với các loại dữ liệu như dữ liệu sự kiện, nhật ký, phiên. Lưu ý Chỉ mục TTL chỉ hoạt động với những trường có kiểu là Ngày. Create index in mongooseBạn có thể định nghĩa chỉ mục tại trường trong lúc định nghĩa Lược đồ hoặc cách sử dụng Schema# . để tạo index. Create index at fieldvar animalSchema = new Schema({ name: String, type: String, tags: { type: [String], index: true } // field level }); animalSchema.index({ name: 1, type: -1 }); // index() method Tạo chỉ mục sử dụng Schema#index()var animalSchema = new Schema({ name: String, type: String, tags: { type: [String] } }); animalSchema.index({ name: 1, type: -1 }); // index() method Chỉ số thưa thớt trong cầy mangutChỉ mục thưa trong mongoose thường được sử dụng chung với chỉ mục duy nhất để tránh trùng lặp dữ liệu. Tạo chỉ mục dự phòng ở cấp độ trườngvar s = new Schema({ name: { type: String, sparse: true } }); Tạo chỉ mục dự phòng sử dụng Schema#index()________số 8Chỉ mục duy nhất trong cầy mangutTạo chỉ mục duy nhất ở cấp trườngvar s = new Schema({ name: { type: String, unique: true }}); Tạo chỉ mục duy nhất sử dụng Schema#index()db.getCollection('people').createIndex({email:1,user:1}, {unique:true})0 Chỉ mục văn bản trong cầy mangutTạo chỉ mục văn bản ở cấp độ trườngdb.getCollection('people').createIndex({email:1,user:1}, {unique:true})1 Tạo chỉ mục văn bản sử dụng Schema#index()This way is used to used. In an number of the way of the field will be error. Các bạn có thể xem qua các vấn đề tại đây. https. //github. com/Automattic/mongoose/issues/3824 |