Nếu tôi tạo bộ sưu tập ở Mongo và sau khi thêm tài liệu vào bộ sưu tập này, tôi sử dụng ensureIndex()
để tạo chỉ mục trên trường số trên tài liệu trong bộ sưu tập này, nếu tôi xóa bộ sưu tập, tôi có phải tạo lại mục lục?Trong MongoDB, nếu bộ sưu tập bị xóa, chỉ mục cũng tự động bị xóa?
Trả lời
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 đó.
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.
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
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. –
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.
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 –
- 1. Trường Mongodb không bị xóa
- 2. Bản ghi đã xóa trong ember không bị xóa khỏi bộ sưu tập
- 3. Chỉ tính nên bị xóa
- 4. Backbone.js: Xóa một mục khỏi bộ sưu tập
- 5. Xóa bộ sưu tập RavenDB
- 6. Xóa một mục khỏi bộ sưu tập (NHibernate)
- 7. Tôi có thể xóa chỉ mục MongoDB mặc định không?
- 8. MongoDB: Giảm cân khi xóa bộ sưu tập và xóa tất cả tài liệu của nó
- 9. Chỉ các bộ sưu tập chỉ ghi trong MongoDB
- 10. Hoạt hình mục bị xóa trong Listbox
- 11. Xóa mục khỏi bộ sưu tập xương sống
- 12. MongoDB: Xóa tất cả các bộ sưu tập có tên khớp với một chuỗi
- 13. Khôi phục tập tin Linux bị xóa
- 14. REST - Xóa bộ sưu tập đối tượng
- 15. Cách sử dụng bộ sưu tập rác để xóa tệp?
- 16. Làm thế nào để xóa nhiều bộ sưu tập mongodb cùng một lúc?
- 17. thiết bị ảo không thể bị xóa
- 18. Mongoose.js: xóa bộ sưu tập hoặc DB
- 19. Xóa một mục khỏi ObservableCollection trong bộ sưu tập sự kiện CollectionChanged
- 20. Các thư mục bị xóa của SVN bị giữ lại
- 21. Có <span> bị xóa tự động nếu thay đổi innerHTML không?
- 22. EF có thể tự động xóa dữ liệu bị mồ côi, nơi cha mẹ không bị xóa không?
- 23. Tại sao các truy vấn bên trong bộ sưu tập system.profile đang bị ghi đè
- 24. CSS: xóa toàn bộ phần tử khi bị cắt bớt
- 25. Làm thế nào để xóa/thả/bỏ trống bộ sưu tập MongoDb với Casbah
- 26. Xóa các tệp và thư mục bị khóa
- 27. Bộ sưu tập số MongoDB Node.js
- 28. Xóa các mục khỏi bộ sưu tập trong java khi đang duyệt qua nó
- 29. Làm thế nào để phát hiện nếu con trỏ bị xóa và xóa an toàn?
- 30. Tự động nén không gian đã xóa trong mongodb?
Tôi có thể tạo chỉ mục trên một bộ sưu tập trống không? – raffian
Có, bạn có thể. Bộ sưu tập sẽ được tạo khi bạn tạo chỉ mục. –
'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