mongofilesを使ったGridFSの操作
mongofilesはMongoDBに標準で用意されているコマンドラインツールです。MongoDBをインストールしたディレクトリのbin以下にあります。このmongofilesを使って,
- 各コマンド共通のコマンドラインオプション
- -vオプションは詳細を出力します。
- -dオプションでデータベース名を指定します。
ファイルの追加
ファイルの追加にはputを使います。ここではgridtestデータベースに1MB.
$ mongofiles -v -d gridtest put 1MB.file
同じファイル名で追加しても, ファイルの取得にはgetを使います。 同じファイル名があった場合は, ファイルをリスト表示するにはlistを使います。ファイル名とファイルサイズが表示されます。同じファイル名がある場合は, ファイルの削除にはdeleteを使います。 ファイルの検索にはsearchを使います。指定した文字列がファイル名に含まれている場合は表示されます。 Ruby用のMongoDB公式ドライバを使用することにより, 必須ではありませんが, まずは準備を行います。RubyからGridFSを扱うには, 以下はgridtestデータベースに対して1MB. 上記をgrid_ mongofiles, 今回はMongoDBでサイズの大きなファイルを扱うGridFSを紹介いたしました。GridFSを使うことにより, 次回はリリース間近となっているMongoDB v2.
$ mongofiles -v -d gridtest -r put 1MB.
ファイルの取得
$ mongofiles -v -d gridtest get 1MB.file
ファイルのリスト表示
$ mongofiles -v -d gridtest list
Wed Feb 20 16:08:01 creating new connection to:127.0.0.1:27017
Wed Feb 20 16:08:01 BackgroundJob starting: ConnectBG
Wed Feb 20 16:08:01 connected connection!
connected to: 127.0.0.1
1MB.file 1048576
1MB.file 1048576
image01.png 524288
image02.png 262144
ファイルの削除
$ mongofiles -v -d gridtest delete 1MB.file
ファイルの検索
$ mongofiles -v -d gridtest search 1MB
Rubyを使ったGridFSの操作
$ gem install mongo
$ gem install bson_ext
$ dd if=/dev/zero of=1MB.file bs=1M count=1
$ mongofiles -d gridtest put 1MB.file
require 'mongo'
db_name = "gridtest"
@con = Mongo::Connection.new
@db = @con[db_name]
@grid = Mongo::Grid.new(@db)
@collection = @db["fs.files"]
# 任意のメタデータを追加可能
file_id = @grid.put(File.binread("1MB.file"),
:filename => "1MB.file",
:tags => ["mongo","database","book"],
:memo => "sample file",
:owner => "mongonouchi")
puts "get file_id=#{file_id}"
puts "filename = #{@grid.get(file_id).filename}"
puts ""
@collection.find({:_id => BSON::ObjectId(file_id.to_s)}).each{ |doc|
puts doc.inspect
}
puts ""
puts "delete file_id=#{file_id}"
@grid.delete(file_id)
$ ruby grid_sample.rb
get file_id=512ac8a2af1fe66a0e000001
filename = 1MB.file
{"_id"=>BSON::ObjectId('512ac8a2af1fe66a0e000001'),
"filename"=>"1MB.file",
"contentType"=>"binary/octet-stream",
"length"=>1048576,
"chunkSize"=>262144,
"uploadDate"=>2013-02-25 02:12:50 UTC,
"md5"=>"b6d81b360a5672d80c27430f39153e2c",
"tags"=>["mongo", "database", "book"],
"memo"=>"sample file",
"owner"=>"mongonouchi"
}
delete file_id=512ac8a2af1fe66a0e000001
その他のツール
次回のテーマ