Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MongoDB remove GridFS objects from shell

I have files stored in a MongoDB using GridFS. I need to remove some of those files by ID, from the JavaScript shell. I need to remove a single file using it's ID. I figured I could just do this:

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

This works to some extent; it removes the file from the fs.files collection but does not remove the chunks itself from the fs.chunks collection. The reason I know that is because I check the length of both collections before and after in RockMongo.

I could go through the chunks and remove those that are referring to that file, but is there a better, built-in way of doing that?

like image 901
Alex Turpin Avatar asked Jan 09 '12 20:01

Alex Turpin


2 Answers

You want to use db.fs.delete(_id); instead.

Update Sorry, that apparently doesn't work from the shell, only through the driver. GridFS is a specification for storage implemented by the drivers. Looks like it doesn't have much built-in functionality from the shell, as such.

Update 2 There is also a command line tool, mongofiles (http://www.mongodb.org/display/DOCS/GridFS+Tools), which allows you to delete files by name. mongofiles delete <filename>. It comes with a warning that it will delete all of the files by that name, so it's not as granular as by id.

like image 80
Eve Freeman Avatar answered Oct 05 '22 19:10

Eve Freeman


You can delete gridFS file by deleting both chunks and files from shell. for example

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

Those commands will do such trick.

like image 35
XenoN Avatar answered Oct 05 '22 17:10

XenoN