MongoDB удаляет объекты GridFS из оболочки

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

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

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

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

Ответ 1

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

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

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

Ответ 2

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

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

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