Class: Mongo::Grid
- Includes:
- Mongo::GridExt::InstanceMethods
- Defined in:
- lib/mongo/gridfs/grid.rb
Overview
Implementation of the MongoDB GridFS specification. A file store.
Constant Summary collapse
- DEFAULT_FS_NAME =
'fs'
Instance Method Summary collapse
-
#delete(id) ⇒ Boolean
Delete a file from the store.
-
#get(id) ⇒ Mongo::GridIO
Read a file from the file store.
-
#initialize(db, fs_name = DEFAULT_FS_NAME) ⇒ Grid
constructor
Initialize a new Grid instance, consisting of a MongoDB database and a filesystem prefix if not using the default.
-
#put(data, opts = {}) ⇒ BSON::ObjectId
Store a file in the file store.
Methods included from Mongo::GridExt::InstanceMethods
Constructor Details
#initialize(db, fs_name = DEFAULT_FS_NAME) ⇒ Grid
Initialize a new Grid instance, consisting of a MongoDB database and a filesystem prefix if not using the default.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/mongo/gridfs/grid.rb', line 15 def initialize(db, fs_name=DEFAULT_FS_NAME) raise MongoArgumentError, "db must be a Mongo::DB." unless db.is_a?(Mongo::DB) @db = db @files = @db["#{fs_name}.files"] @chunks = @db["#{fs_name}.chunks"] @fs_name = fs_name # This will create indexes only if we're connected to a primary node. connection = @db.connection begin @chunks.ensure_index([['files_id', Mongo::ASCENDING], ['n', Mongo::ASCENDING]], :unique => true) rescue Mongo::ConnectionFailure end end |
Instance Method Details
#delete(id) ⇒ Boolean
Delete a file from the store.
Note that deleting a GridFS file can result in read errors if another process is attempting to read a file while it’s being deleted. While the odds for this kind of race condition are small, it’s important to be aware of.
90 91 92 93 |
# File 'lib/mongo/gridfs/grid.rb', line 90 def delete(id) @files.remove({"_id" => id}) @chunks.remove({"files_id" => id}) end |
#get(id) ⇒ Mongo::GridIO
Read a file from the file store.
76 77 78 79 |
# File 'lib/mongo/gridfs/grid.rb', line 76 def get(id) opts = {:query => {'_id' => id}}.merge!(default_grid_io_opts) GridIO.new(@files, @chunks, nil, 'r', opts) end |
#put(data, opts = {}) ⇒ BSON::ObjectId
Store a file in the file store. This method is designed only for writing new files; if you need to update a given file, first delete it using Grid#delete.
Note that arbitrary metadata attributes can be saved to the file by passing them in as options.
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/mongo/gridfs/grid.rb', line 54 def put(data, opts={}) begin # Ensure there is an index on files_id and n, as state may have changed since instantiation of self. # Recall that index definitions are cached with ensure_index so this statement won't unneccesarily repeat index creation. @chunks.ensure_index([['files_id', Mongo::ASCENDING], ['n', Mongo::ASCENDING]], :unique => true) opts = opts.dup filename = opts.delete(:filename) opts.merge!(default_grid_io_opts) file = GridIO.new(@files, @chunks, filename, 'w', opts) file.write(data) file.close file.files_id rescue Mongo::ConnectionFailure => e raise e, "Failed to create necessary index and write data." end end |