2011-12-14 38 views

Trả lời

27

Câu trả lời ngắn gọn: có.

Chỉ mục đang giảm khi thu thập bộ sưu tập. Bạn cần tạo lại một chỉ mục.

Bạn có thể không muốn xóa bộ sưu tập nhưng xóa tất cả các mục trong đó bằng db.collection_name.remove({}). Nó sẽ mất nhiều tài nguyên hơn nhưng để lại chỉ mục của bạn. Trên thực tế, nó sẽ cần xóa tất cả dữ liệu chỉ mục. Đó là lý do tại sao nó được ưa thích hơn để thả toàn bộ bộ sưu tập và tạo lại các chỉ mục sau đó.

+1

Tôi có thể tạo chỉ mục trên một bộ sưu tập trống không? – raffian

+1

Có, bạn có thể. Bộ sưu tập sẽ được tạo khi bạn tạo chỉ mục. –

+1

'remove()' có thể mất nhiều thời gian cho các bộ sưu tập lớn. 'drop()' là nhanh hơn nhiều, nhưng có nhược điểm của việc loại bỏ tất cả các chỉ mục, như đã được ghi nhận. – dcrosta

1

Việc bỏ bộ sưu tập sẽ giảm tất cả các chỉ mục, như bạn nghi ngờ, vì vậy khi bạn tạo lại bộ sưu tập (hoặc rõ ràng hoặc ngầm định bằng cách thêm tài liệu mới), bạn sẽ cần phải tạo lại bất kỳ chỉ mục nào bạn cần có. Chỉ mục mặc định trên _id được tạo tự động cho bạn.

+1

Ok, hiểu, có bất kỳ tác hại nào khi gọi đến EnsureIndex() nhiều lần trên cùng một bộ sưu tập nếu chỉ mục đã tồn tại không? – raffian

+0

Không gây hại. Tác động hiệu suất nhỏ để kiểm tra xem chỉ mục bạn đang cố gắng đảm bảo đã có hay không. –

7

Tôi vừa thực hiện việc này trên bộ sưu tập có 10 chỉ mục và không muốn tạo lại các chỉ mục đó theo cách thủ công. Bạn có thể thực hiện một thả và tái tạo với các chỉ mục với ba dòng sau trong vỏ Mongo:

var indexes = db.collection.getIndexKeys().splice(1) 
db.collection.drop(); 
indexes.forEach(function(el){ db.collection.ensureIndex(el, {background:true}); }) 

Đây không phải là đủ thông minh để xử lý các chỉ số duy nhất hoặc thưa thớt nhưng tôi nghĩ đó sẽ là khá dễ dàng để hỗ trợ bằng cách sử dụng đầu ra của getIndexes() thay thế. Tôi không cần điều đó, vì vậy tôi đã không làm điều đó.

Ghép (1) chỉ để xóa chỉ mục trên _id, vì nó sẽ được tạo tự động.

+0

cảm ơn nhiều, nhưng '{background: true}' đã xóa các chỉ mục của tôi, mà không có nó hoạt động tốt –

Các vấn đề liên quan