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

2 cách để hiện một chỉ mục trong MongoDB

Nếu bạn có một chỉ mục ẩn trong MongoDB, bạn có thể sử dụng unhideIndex() hoặc collMod lệnh quản trị để hiện nó.

Chỉ mục mẫu

Hãy xem các chỉ mục trên bộ sưu tập có tên là pets :

db.pets.getIndexes()

Kết quả:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"weight" : -1
		},
		"name" : "idx_weight_-1",
		"hidden" : true
	},
	{
		"v" : 2,
		"hidden" : true,
		"key" : {
			"type" : 1
		},
		"name" : "type_1"
	}
]

Chúng ta có thể thấy rằng có ba chỉ mục và hai chỉ mục cuối cùng bị ẩn. Chúng tôi biết điều này vì họ có "hidden" : true theo định nghĩa của họ.

Hiện bằng unhideIndexes() Phương pháp

Cách đầu tiên để hiện một chỉ mục là sử dụng db.collection.unhideIndex() phương pháp. Phương thức này chấp nhận tên của chỉ mục hoặc mẫu khóa của nó làm tham số để chỉ định chỉ mục nào cần bỏ ẩn.

Ví dụ:

db.pets.unhideIndex("idx_weight_-1")

Đầu ra:

{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }

Đầu ra của unhideIndex() phương thức hiển thị giá trị cũ cho hidden trường (trong trường hợp này là true ) và giá trị mới (trong trường hợp này là false ).

Tuy nhiên, nếu chúng tôi hiện một chỉ mục đã được hiển thị (hoặc ẩn một chỉ mục đã bị ẩn), những chỉ mục này sẽ không được hiển thị và chúng tôi chỉ nhận được những điều sau:

{ "ok" : 1 }

Trong mọi trường hợp, chỉ mục hiện đang được hiển thị.

unhideIndex() phương thức là một trình bao bọc cho collMod lệnh quản trị (bên dưới).

collMod Lệnh

collMod lệnh quản trị cho phép chúng tôi thêm các tùy chọn vào một bộ sưu tập hoặc sửa đổi các định nghĩa chế độ xem.

Chúng tôi có thể sử dụng nó để hiện một chỉ mục bằng cách chuyển hidden: false :

Ví dụ:

db.runCommand( {
   collMod: "pets",
   index: {
      name: "type_1",
      hidden: false
   }
} )

Kết quả:

{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }

Điều này trả về cùng một tài liệu unhideIndex() lợi nhuận.

Tương tự với unhideIndex() , bạn có tùy chọn chỉ định tên chỉ mục hoặc mẫu khóa của nó.

Dưới đây là một ví dụ về việc sử dụng mẫu khóa:

db.runCommand( {
   collMod: "pets",
   index: {
      keyPattern: { "type" : 1 },
      hidden: false
   }
} )

Trong trường hợp này, chỉ mục được xác định bằng cách sử dụng { "type" : 1 } và do đó định nghĩa này có thể được sử dụng thay cho tên chỉ mục.

Xác minh các thay đổi

Để xác minh các thay đổi của mình, chúng tôi có thể gọi getIndexes() một lần nữa để xem định nghĩa của chỉ mục:

db.pets.getIndexes()

Kết quả:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"weight" : -1
		},
		"name" : "idx_weight_-1"
	},
	{
		"v" : 2,
		"key" : {
			"type" : 1
		},
		"name" : "type_1"
	}
]

Như mong đợi, cả hai chỉ mục đã được hiển thị. Chúng tôi cũng có thể ẩn chúng lại bằng cách chuyển hidden: true .

Không thể ẩn / hiện chỉ mục? Kiểm tra Cài đặt này.

mongod featureCompatibilityVersion ít nhất phải là 4.4 trước khi bạn có thể ẩn các chỉ mục. Tuy nhiên, sau khi bị ẩn, chỉ mục sẽ vẫn bị ẩn ngay cả với featureCompatibilityVersion đặt thành 4.2 trên tệp nhị phân MongoDB 4.4.

Bạn có thể kiểm tra featureCompatibilityVersion cài đặt bằng mã sau:

db.adminCommand( 
    { 
        getParameter: 1, 
        featureCompatibilityVersion: 1 
    } 
)

Bạn có thể đặt nó bằng setFeatureCompatibilityVersion lệnh:

db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )

setFeatureCompatibilityVersion lệnh cần được chạy trong admin cơ sở dữ liệu.

Cũng lưu ý, bạn không thể ẩn _id chỉ mục.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cài đặt MongoDB trên CentOS 7

  2. Làm thế nào để thực hiện addToSet bằng cách sử dụng trình điều khiển chính thức của Go?

  3. Mongodb:nhiều bộ sưu tập hoặc một bộ sưu tập lớn w / index

  4. Mongodb tìm bên trong mảng phụ

  5. Các bước kết nối MongoDB và Solr bằng DataImportHandler