Class: Mongo::Grid
- Inherits:
-
Object
- Object
- 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
- DEFAULT_FS_NAME =
'fs'
Instance Method Summary (collapse)
-
- (Boolean) delete(id)
Delete a file from the store.
-
- (Mongo::GridIO) get(id)
Read a file from the file store.
-
- (Grid) initialize(db, fs_name = DEFAULT_FS_NAME)
constructor
Initialize a new Grid instance, consisting of a MongoDB database and a filesystem prefix if not using the default.
-
- (BSON::ObjectId) put(data, opts = {})
Store a file in the file store.
Methods included from Mongo::GridExt::InstanceMethods
Constructor Details
- (Grid) initialize(db, fs_name = DEFAULT_FS_NAME)
Initialize a new Grid instance, consisting of a MongoDB database and a filesystem prefix if not using the default.
Core docs:
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
- (Boolean) delete(id)
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 |
- (Mongo::GridIO) get(id)
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 |
- (BSON::ObjectId) put(data, opts = {})
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 |