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

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

Chỉ mục duy nhất hợp chất mongodb
Chỉ mục duy nhất hợp chất mongodb

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 MongoDB

MongoDB 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 đơn

Chỉ 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ất

MongoDB 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 duy nhất hợp chất mongodb
Chỉ mục duy nhất hợp chất mongodb

chỉ mục đa phím

MongoDB 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ản

Chỉ 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ục

chỉ mục duy nhất

Thuộ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ớt

Chỉ 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ố TTL

TTL 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 mongoose

Bạ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 field

  var 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 mangut

Chỉ 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ường

var s = new Schema({ name: { type: String, sparse: true } });

Tạo chỉ mục dự phòng sử dụng Schema#index()

________số 8

Chỉ mục duy nhất trong cầy mangut

Tạo chỉ mục duy nhất ở cấp trường

var 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 mangut

Tạo chỉ mục văn bản ở cấp độ trường

db.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