2012-06-26 35 views
12

Có rất nhiều bộ sưu tập mongodb trong cơ sở dữ liệu của tôi mà tôi cần xóa. Tất cả đều có tên tương tự và sẽ dễ dàng xóa chúng nếu chỉ có thể sử dụng các ký tự đại diện. Nhưng nó không giống như họ có thể.Làm thế nào để xóa nhiều bộ sưu tập mongodb cùng một lúc?

Có cách nào để chọn một loạt bộ sưu tập cùng một lúc để xóa chúng không?

Trả lời

6

Không, không có cách nào để thả nhiều bộ sưu tập bằng ký tự đại diện/regex. Bạn phải bỏ từng cái một. Gần đây tôi đã thực hiện một tác vụ tương tự và tập lệnh của tôi có thể giảm ~ 20-30 bộ sưu tập mỗi giây. Bạn có bao nhiêu

5

Bạn có thể xóa tất cả các bộ sưu tập bằng lệnh sau đây.

> use database_name; 

> db.getCollectionNames().forEach(function(c) { 
    if(c != 'system.indexes') { 
     db.getCollection(c).drop(); 
    } 
    }); 
+1

Đó vẫn là từng người một và không có regex :) –

17

Đối với regex bạn có thể sử dụng string.match

db.getCollectionNames().forEach(function(c) { 
    if(!c.match("^system.indexes")) { 
     db.getCollection(c).drop(); 
    } 
    }); 
+2

Kiểm tra regex của bạn. Ví dụ của bạn sẽ thả bộ sưu tập 'system.indexes'. Tôi giả sử bạn dự định này để thả tất cả mọi thứ ngoại trừ 'system.indexes'. – wyattisimo

+0

@wyattisimo bạn nói đúng, regex khớp với 'system.indexes', và có ý định là bỏ mọi thứ trừ' system.indexes'. Cảm ơn! Tôi đã sửa mã. –

3

Bạn có thể thả mỗi bộ sưu tập trong cơ sở dữ liệu với db.dropDatabase() trong vỏ Mongo. Chỉ cần chắc chắn rằng bạn thực sự muốn nuke tất cả mọi thứ trước khi bạn làm.

3
# Delete Particular Collections From MongoDB 

> use database_name 

> delete_collection_list = ["collection1", "collection2", "collection3", "collection4", "collection5", "collection6"] 

> delete_collection_list.forEach(function (collection) { 
    if (db.getCollectionNames().indexOf(collection)>=0) { 
     db[collection].drop(); 
     print("Deleted Collection: "+ collection); 
    } 
    }) 
Các vấn đề liên quan