12

我使用 GridFS 将文件存储在 MongoDB 中。我需要从 JavaScript shell 中按 ID 删除其中一些文件。我需要使用它的 ID 删除单个文件。我想我可以这样做:

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

这在某种程度上有效;它从集合中删除文件,fs.files但不会从集合中删除块本身fs.chunks。我知道的原因是因为我在 RockMongo 之前和之后检查了两个集合的长度。

我可以遍历这些块并删除那些引用该文件的块,但是有没有更好的内置方法呢?

4

3 回答 3

23

您可以通过从 shell 中删除块和文件来删除 gridFS 文件。例如

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

这些命令会做这样的伎俩。

于 2013-11-19T05:25:30.123 回答
14

你想db.fs.delete(_id);改用。

更新 对不起,这显然不适用于外壳,只能通过驱动程序。GridFS 是由驱动程序实现的存储规范。因此,看起来它没有太多来自 shell 的内置功能。

更新 2还有一个命令行工具 mongofiles ( http://www.mongodb.org/display/DOCS/GridFS+Tools ),它允许您按名称删除文件。mongofiles delete <filename>. 它带有一个警告,它将删除该名称的所有文件,因此它不像 id 那样精细。

于 2012-01-09T20:37:47.170 回答
3
mongofiles --host localhost:30000 --db logo delete logo_susan1225.png

参考这个页面: http ://docs.mongodb.org/manual/reference/program/mongofiles/#bin.mongofiles

于 2013-05-14T07:58:39.203 回答