MongoDB - Lập chỉ mục

Các chỉ mục hỗ trợ giải quyết các truy vấn hiệu quả. Không có chỉ mục, MongoDB phải quét mọi tài liệu của bộ sưu tập để chọn những tài liệu phù hợp với câu lệnh truy vấn. Quá trình quét này rất kém hiệu quả và yêu cầu MongoDB xử lý một lượng lớn dữ liệu.

Chỉ mục là cấu trúc dữ liệu đặc biệt, lưu trữ một phần nhỏ của tập dữ liệu ở dạng dễ duyệt. Chỉ mục lưu trữ giá trị của một trường cụ thể hoặc tập hợp các trường, được sắp xếp theo giá trị của trường như được chỉ định trong chỉ mục.

Phương thức createIndex ()

Để tạo chỉ mục, bạn cần sử dụng phương thức createIndex () của MongoDB.

Cú pháp

Cú pháp cơ bản của createIndex() phương thức như sau ().

>db.COLLECTION_NAME.createIndex({KEY:1})

Đây chính là tên của trường mà bạn muốn tạo chỉ mục và 1 là cho thứ tự tăng dần. Để tạo chỉ mục theo thứ tự giảm dần, bạn cần sử dụng -1.

Thí dụ

>db.mycol.createIndex({"title":1})
{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 1,
	"numIndexesAfter" : 2,
	"ok" : 1
}
>

Trong createIndex() bạn có thể chuyển nhiều trường để tạo chỉ mục trên nhiều trường.

>db.mycol.createIndex({"title":1,"description":-1})
>

Phương pháp này cũng chấp nhận danh sách các tùy chọn (là tùy chọn). Sau đây là danh sách -

Tham số Kiểu Sự miêu tả
lý lịch Boolean Xây dựng chỉ mục trong nền để việc tạo chỉ mục không chặn các hoạt động cơ sở dữ liệu khác. Chỉ định true để xây dựng trong nền. Giá trị mặc định làfalse.
độc nhất Boolean Tạo một chỉ mục duy nhất để bộ sưu tập không chấp nhận việc chèn các tài liệu trong đó khóa chỉ mục hoặc các khóa khớp với giá trị hiện có trong chỉ mục. Chỉ định true để tạo chỉ mục duy nhất. Giá trị mặc định làfalse.
Tên chuỗi Tên của chỉ mục. Nếu không được chỉ định, MongoDB tạo tên chỉ mục bằng cách ghép tên của các trường được lập chỉ mục và thứ tự sắp xếp.
thưa thớt Boolean Nếu đúng, chỉ mục chỉ tham chiếu đến các tài liệu có trường được chỉ định. Các chỉ mục này sử dụng ít không gian hơn nhưng hoạt động khác nhau trong một số trường hợp (đặc biệt là các loại). Giá trị mặc định làfalse.
expireAfterSeconds số nguyên Chỉ định một giá trị, tính bằng giây, làm TTL để kiểm soát thời gian MongoDB lưu giữ các tài liệu trong bộ sưu tập này.
trọng lượng tài liệu Trọng số là một số nằm trong khoảng từ 1 đến 99,999 và biểu thị tầm quan trọng của trường so với các trường được lập chỉ mục khác về điểm số.
ngôn ngữ mặc định chuỗi Đối với chỉ mục văn bản, ngôn ngữ xác định danh sách các từ dừng và các quy tắc cho trình tạo gốc và trình mã hóa. Giá trị mặc định làEnglish.
language_override chuỗi Đối với chỉ mục văn bản, hãy chỉ định tên của trường trong tài liệu chứa ngôn ngữ để ghi đè ngôn ngữ mặc định. Giá trị mặc định là ngôn ngữ.

Phương thức dropIndex ()

Bạn có thể giảm một chỉ mục cụ thể bằng cách sử dụng phương thức dropIndex () của MongoDB.

Cú pháp

Cú pháp cơ bản của phương thức DropIndex () như sau ().

>db.COLLECTION_NAME.dropIndex({KEY:1})

Đây chính là tên của tệp mà bạn muốn tạo chỉ mục và 1 là cho thứ tự tăng dần. Để tạo chỉ mục theo thứ tự giảm dần, bạn cần sử dụng -1.

Thí dụ

> db.mycol.dropIndex({"title":1})
{
	"ok" : 0,
	"errmsg" : "can't find index with key: { title: 1.0 }",
	"code" : 27,
	"codeName" : "IndexNotFound"
}

Phương thức dropIndexes ()

Phương pháp này xóa nhiều chỉ mục (được chỉ định) trên một tập hợp.

Cú pháp

Cú pháp cơ bản của phương thức DropIndexes () như sau () -

>db.COLLECTION_NAME.dropIndexes()

Thí dụ

Giả sử chúng ta đã tạo 2 chỉ mục trong bộ sưu tập mycol được đặt tên như hình dưới đây -

> db.mycol.createIndex({"title":1,"description":-1})

Ví dụ sau loại bỏ các chỉ mục đã tạo ở trên của mycol -

>db.mycol.dropIndexes({"title":1,"description":-1})
{ "nIndexesWas" : 2, "ok" : 1 }
>

Phương thức getIndexes ()

Phương thức này trả về mô tả của tất cả các chỉ mục trong bộ sưu tập.

Cú pháp

Sau đây là cú pháp cơ bản od phương thức getIndexes () -

db.COLLECTION_NAME.getIndexes()

Thí dụ

Giả sử chúng ta đã tạo 2 chỉ mục trong bộ sưu tập mycol được đặt tên như hình dưới đây -

> db.mycol.createIndex({"title":1,"description":-1})

Ví dụ sau lấy tất cả các chỉ mục trong mycol bộ sưu tập -

> db.mycol.getIndexes()
[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_",
		"ns" : "test.mycol"
	},
	{
		"v" : 2,
		"key" : {
			"title" : 1,
			"description" : -1
		},
		"name" : "title_1_description_-1",
		"ns" : "test.mycol"
	}
]
>