2012-01-09 78 views
10

我有使用GridFS存儲在MongoDB中的文件。我需要從JavaScript shell中刪除一些ID文件。我需要使用它的ID刪除一個文件。我想我可以這樣做:MongoDB從shell中刪除GridFS對象

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

這在某種程度上起作用;它會從fs.files集合中刪除該文件,但不會從fs.chunks集合中刪除該塊本身。我知道的原因是因爲我在RockMongo之前和之後檢查了兩個集合的長度。

我可以通過這些塊並刪除那些引用該文件的文件,但是有沒有更好的內置方法來做到這一點?

回答

12

您想改爲使用db.fs.delete(_id);

更新 對不起,這顯然不能從殼,只能通過驅動程序。 GridFS是由驅動程序實現的存儲規範。看起來它沒有太多內置的shell功能,因此。

更新2還有一個命令行工具,mongofiles(http://www.mongodb.org/display/DOCS/GridFS+Tools),它可以讓你的名字刪除文件mongofiles delete <filename>。它帶有一個警告,表示它將通過該名稱刪除所有文件,所以它不像ID那樣精確。

+0

啊我明白了。可悲的是,我不能使用mongofiles,因爲我只有我想要刪除的文件的ID。你預見到我會通過刪除自己的匹配塊來獲得任何問題嗎? – 2012-01-09 21:04:11

+4

你需要通過shell來做到這一點嗎?爲什麼不用選擇的語言連接驅動程序?不,據我所知,可以做一些像'db.fs.chunks.remove({files_id:my_id});'然後'db.fs.files.remove({_ id:my_id}) ;' – 2012-01-09 21:13:02

+0

我寧願從shell中執行它,但我會用驅動程序使用一種語言。謝謝! – 2012-01-09 21:13:57

22

您可以通過外殼刪除這兩個塊和文件刪除GridFS的文件。例如

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

這些命令會做這樣的伎倆。

+0

這也是如此。 – 2013-11-19 22:31:43