2012-01-09 3 views
10

У меня есть файлы, хранящиеся в MongoDB с использованием GridFS. Мне нужно удалить некоторые из этих файлов по ID из оболочки JavaScript. Мне нужно удалить один файл, используя его ID. Я решил, что могу просто сделать это:MongoDB удаляет объекты GridFS из оболочки

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

Это работает в некоторой степени; он удаляет файл из коллекции fs.files, но не удаляет сами куски из коллекции fs.chunks. Причина, по которой я знаю, потому что я проверяю длину обеих коллекций до и после в RockMongo.

Я мог бы пройти через куски и удалить те, которые относятся к этому файлу, но есть ли лучший, встроенный способ сделать это?

ответ

12

Вместо этого вы хотите использовать db.fs.delete(_id);.

Обновление Извините, что, похоже, это не работает из оболочки, только через драйвер. GridFS - это спецификация для хранения, реализованная драйверами. Похоже, у него не так много встроенных функций из оболочки, как таковых.

Update 2 Существует также утилита командной строки, mongofiles (http://www.mongodb.org/display/DOCS/GridFS+Tools), который позволяет удалять файлы по имени. mongofiles delete <filename>. Он поставляется с предупреждением о том, что он удалит все файлы с помощью этого имени, поэтому он не будет таким же детализационным, как по id.

+0

А я вижу. К сожалению, я не могу использовать mongofiles, потому что у меня есть только ID файла, который я хочу удалить. Предвидите ли вы какие-либо проблемы, которые я мог бы получить, удалив соответствующие куски? –

+4

Вам нужно сделать это через оболочку? Почему бы не соединиться с водителем на вашем родном языке? И нет, насколько я знаю, было бы нормально делать что-то вроде 'db.fs.chunks.remove ({files_id: my_id});' и затем 'db.fs.files.remove ({_ id: my_id}) ; ' –

+0

Я бы предпочел сделать это из оболочки, но я буду использовать язык с драйвером. Благодаря! –

22

Вы можете удалить gridFS файл, удалив как ломти и файлы из оболочки. например

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

Эти команды будут делать такой трюк.

+0

Это также верно. –

Смежные вопросы