2012-01-09 35 views
10

Tôi có các tệp được lưu trữ trong MongoDB bằng cách sử dụng GridFS. Tôi cần xóa một số tệp đó bằng ID, từ trình bao JavaScript. Tôi cần xóa một tệp duy nhất bằng ID của nó. Tôi nghĩ rằng tôi chỉ có thể làm điều này:MongoDB loại bỏ các đối tượng GridFS khỏi shell

db.fs.files.remove({_id: my_id}); 

Điều này hoạt động ở một mức độ nào đó; nó loại bỏ các tập tin từ bộ sưu tập fs.files nhưng không loại bỏ các khối chính nó từ bộ sưu tập fs.chunks. Lý do tôi biết đó là vì tôi kiểm tra độ dài của cả hai bộ sưu tập trước và sau trong RockMongo.

Tôi có thể đi qua các phần và xóa những phần đang đề cập đến tệp đó, nhưng có cách nào tốt hơn, tích hợp để thực hiện điều đó không?

Trả lời

12

Bạn muốn sử dụng db.fs.delete(_id); để thay thế.

Cập nhật Xin lỗi, điều đó dường như không hoạt động từ trình bao, chỉ thông qua trình điều khiển. GridFS là một đặc điểm kỹ thuật cho lưu trữ được thực hiện bởi các trình điều khiển. Có vẻ như nó không có nhiều chức năng tích hợp từ trình bao, như vậy.

Cập nhật 2 Ngoài ra còn có một công cụ dòng lệnh, mongofiles (http://www.mongodb.org/display/DOCS/GridFS+Tools), cho phép bạn xóa các tập tin theo tên. mongofiles delete <filename>. Nó đi kèm với một cảnh báo rằng nó sẽ xóa tất cả các tập tin theo tên đó, do đó, nó không phải là chi tiết như id.

+0

Tôi hiểu rồi. Đáng buồn thay, tôi không thể sử dụng mongofiles vì ​​tôi chỉ có ID của tệp mà tôi muốn xóa. Bạn có thấy trước bất kỳ vấn đề nào tôi có thể xóa bằng cách xóa các khối phù hợp không? –

+4

Bạn có cần làm điều này thông qua trình bao không? Tại sao không kết nối với tài xế bằng ngôn ngữ bạn chọn? Và không, theo như tôi biết nó sẽ là ok để làm một cái gì đó như 'db.fs.chunks.remove ({files_id: my_id});' và sau đó 'db.fs.files.remove ({_ id: my_id}) ; ' –

+0

Tôi muốn làm điều đó từ trình bao nhưng tôi sẽ sử dụng ngôn ngữ với trình điều khiển. Cảm ơn! –

22

Bạn có thể xóa gridFS tập tin bằng cách xóa cả hai khối và các tập tin từ vỏ. ví dụ:

db['fs.chunks'].remove({files_id:my_id}); 
db['fs.files'].remove({_id:my_id}); 

Các lệnh đó sẽ thực hiện thủ thuật như vậy.

+0

Điều này cũng đúng. –

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