Class: Mongo::GridFileSystem
- Includes:
- Mongo::GridExt::InstanceMethods
- Defined in:
- lib/mongo/gridfs/grid_file_system.rb
Overview
A file store built on the GridFS specification featuring an API and behavior similar to that of a traditional file system.
Instance Method Summary collapse
-
#delete(filename = nil) { ... } ⇒ Boolean
(also: #unlink)
Delete the file with the given filename.
-
#initialize(db, fs_name = Grid::DEFAULT_FS_NAME) ⇒ GridFileSystem
constructor
Initialize a new GridFileSystem instance, consisting of a MongoDB database and a filesystem prefix if not using the default.
-
#open(filename, mode, opts = {}) ⇒ Object
Open a file for reading or writing.
Methods included from Mongo::GridExt::InstanceMethods
Constructor Details
#initialize(db, fs_name = Grid::DEFAULT_FS_NAME) ⇒ GridFileSystem
Initialize a new GridFileSystem instance, consisting of a MongoDB database and a filesystem prefix if not using the default.
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/mongo/gridfs/grid_file_system.rb', line 32 def initialize(db, fs_name=Grid::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 @default_query_opts = {:sort => [['filename', 1], ['uploadDate', -1]], :limit => 1} # Ensure indexes only if not connected to slave. unless db.connection.slave_ok? @files.create_index([['filename', 1], ['uploadDate', -1]]) @chunks.create_index([['files_id', Mongo::ASCENDING], ['n', Mongo::ASCENDING]], :unique => true) end end |
Instance Method Details
#delete(filename = nil) { ... } ⇒ Boolean Also known as: unlink
Delete the file with the given filename. Note that this will delete all versions of the file.
Be careful with this. 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.
126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/mongo/gridfs/grid_file_system.rb', line 126 def delete(filename=nil) if block_given? files = yield else files = @files.find({'filename' => filename}, :fields => ['_id']) end files.each do |file| @files.remove({'_id' => file['_id']}) @chunks.remove({'files_id' => file['_id']}) end end |
#open(filename, mode, opts = {}) ⇒ Object
Open a file for reading or writing. Note that the options for this method only apply when opening in ‘w’ mode.
Note that arbitary metadata attributes can be saved to the file by passing them is as options.
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/mongo/gridfs/grid_file_system.rb', line 95 def open(filename, mode, opts={}) opts.merge!(default_grid_io_opts(filename)) del = opts.delete(:delete_old) && mode == 'w' file = GridIO.new(@files, @chunks, filename, mode, opts) return file unless block_given? result = nil begin result = yield file ensure id = file.close if del self.delete do @files.find({'filename' => filename, '_id' => {'$ne' => id}}, :fields => ['_id']) end end end result end |