2012-01-09 8 views
10

私はGridFSを使ってMongoDBにファイルを保存しています。 JavaScriptシェルからこれらのファイルの一部をIDで削除する必要があります。私はそれのIDを使用して単一のファイルを削除する必要があります。MongoDBはGridFSオブジェクトをシェルから削除します

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

これはある程度機能しています。ファイルはfs.filesコレクションから削除されますが、チャンク自体はfs.chunksコレクションから削除されません。私がそれを知っている理由は、RockMongoで前と後の両方のコレクションの長さをチェックするからです。

私はチャンクを通過し、そのファイルを参照しているものを削除できますが、これを行うためのより良い組み込みの方法がありますか?

答えて

12

代わりにdb.fs.delete(_id);を使用します。

更新 申し訳ありませんが、それは明らかにのみドライバを介して、シェルから動作しません。 GridFSは、ドライバによって実装されるストレージの仕様です。シェルのような組み込みの機能はあまりないようです。名前でファイルを削除することを可能にするコマンドラインツールがある2

更新、mongofiles(http://www.mongodb.org/display/DOCS/GridFS+Tools)、。 mongofiles delete <filename>。その名前ですべてのファイルを削除するという警告が表示されるので、idで指定されているように細かくはありません。

+0

わかりました。悲しいことに、私は削除したいファイルのIDしか持っていないので、mongofilesを使うことはできません。一致するチャンクを自分で削除することで問題が発生することはありますか? –

+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

これも当てはまります。 –

関連する問題