Class: Mongo::Grid::FSBucket
- Inherits:
-
Object
- Object
- Mongo::Grid::FSBucket
- Extended by:
- Forwardable
- Defined in:
- lib/mongo/grid/fs_bucket.rb,
lib/mongo/grid/stream.rb,
lib/mongo/grid/stream/read.rb,
lib/mongo/grid/stream/write.rb
Overview
Represents a view of the GridFS in the database.
Defined Under Namespace
Modules: Stream
Constant Summary collapse
- DEFAULT_ROOT =
The default root prefix.
'fs'.freeze
- CHUNKS_INDEX =
The specification for the chunks collection index.
{ :files_id => 1, :n => 1 }.freeze
- FILES_INDEX =
The specification for the files collection index.
{ filename: 1, uploadDate: 1 }.freeze
Instance Attribute Summary collapse
-
#chunks_collection ⇒ Collection
readonly
Chunks_collection The chunks collection.
-
#database ⇒ Database
readonly
Database The database.
-
#files_collection ⇒ Collection
readonly
Files_collection The files collection.
-
#options ⇒ Hash
readonly
Options The FSBucket options.
Instance Method Summary collapse
-
#delete(id) ⇒ Result
Remove a single file, identified by its id from the GridFS.
-
#delete_one(file) ⇒ Result
Remove a single file from the GridFS.
-
#download_to_stream(id, io) ⇒ Object
Downloads the contents of the file specified by id and writes them to the destination io object.
-
#download_to_stream_by_name(filename, io, opts = {}) ⇒ Object
Downloads the contents of the stored file specified by filename and by the revision in options and writes the contents to the destination io object.
-
#find(selector = nil, options = {}) ⇒ CollectionView
Find files collection documents matching a given selector.
-
#find_one(selector = nil) ⇒ Grid::File
deprecated
Deprecated.
Please use #find instead with a limit of -1. Will be removed in version 3.0.
-
#initialize(database, options = {}) ⇒ FSBucket
constructor
Create the GridFS.
-
#insert_one(file) ⇒ BSON::ObjectId
deprecated
Deprecated.
Please use #upload_from_stream or #open_upload_stream instead. Will be removed in version 3.0.
-
#open_download_stream(id) {|The| ... } ⇒ Stream::Read
Opens a stream from which a file can be downloaded, specified by id.
-
#open_download_stream_by_name(filename, opts = {}) {|The| ... } ⇒ Stream::Read
Opens a stream from which the application can read the contents of the stored file specified by filename and the revision in options.
-
#open_upload_stream(filename, opts = {}) {|The| ... } ⇒ Stream::Write
Opens an upload stream to GridFS to which the contents of a user file came be written.
-
#prefix ⇒ String
Get the prefix for the GridFS.
-
#read_preference ⇒ Mongo::ServerSelector
Get the read preference.
-
#upload_from_stream(filename, io, opts = {}) ⇒ BSON::ObjectId
Uploads a user file to a GridFS bucket.
-
#write_concern ⇒ Mongo::WriteConcern
Get the write concern.
Constructor Details
#initialize(database, options = {}) ⇒ FSBucket
Create the GridFS.
152 153 154 155 156 157 |
# File 'lib/mongo/grid/fs_bucket.rb', line 152 def initialize(database, = {}) @database = database @options = @chunks_collection = database[chunks_name] @files_collection = database[files_name] end |
Instance Attribute Details
#chunks_collection ⇒ Collection (readonly)
Returns chunks_collection The chunks collection.
42 43 44 |
# File 'lib/mongo/grid/fs_bucket.rb', line 42 def chunks_collection @chunks_collection end |
#database ⇒ Database (readonly)
Returns database The database.
47 48 49 |
# File 'lib/mongo/grid/fs_bucket.rb', line 47 def database @database end |
#files_collection ⇒ Collection (readonly)
Returns files_collection The files collection.
52 53 54 |
# File 'lib/mongo/grid/fs_bucket.rb', line 52 def files_collection @files_collection end |
#options ⇒ Hash (readonly)
Returns options The FSBucket options.
57 58 59 |
# File 'lib/mongo/grid/fs_bucket.rb', line 57 def @options end |
Instance Method Details
#delete(id) ⇒ Result
Remove a single file, identified by its id from the GridFS.
197 198 199 200 201 202 |
# File 'lib/mongo/grid/fs_bucket.rb', line 197 def delete(id) result = files_collection.find({ :_id => id }, @options).delete_one chunks_collection.find({ :files_id => id }, @options).delete_many raise Error::FileNotFound.new(id, :id) if result.n == 0 result end |
#delete_one(file) ⇒ Result
Remove a single file from the GridFS.
181 182 183 |
# File 'lib/mongo/grid/fs_bucket.rb', line 181 def delete_one(file) delete(file.id) end |
#download_to_stream(id, io) ⇒ Object
Downloads the contents of the file specified by id and writes them to the destination io object.
235 236 237 238 239 240 241 |
# File 'lib/mongo/grid/fs_bucket.rb', line 235 def download_to_stream(id, io) open_download_stream(id) do |stream| stream.each do |chunk| io << chunk end end end |
#download_to_stream_by_name(filename, io, opts = {}) ⇒ Object
Downloads the contents of the stored file specified by filename and by the revision in options and writes the contents to the destination io object.
Revision numbers are defined as follows: 0 = the original stored file 1 = the first revision 2 = the second revision etc…-2 = the second most recent revision -1 = the most recent revision
# @example Download the original file.
fs.download_to_stream_by_name('some-file.txt', io, revision: 0)
329 330 331 |
# File 'lib/mongo/grid/fs_bucket.rb', line 329 def download_to_stream_by_name(filename, io, opts = {}) download_to_stream(open_download_stream_by_name(filename, opts).file_id, io) end |
#find(selector = nil, options = {}) ⇒ CollectionView
Find files collection documents matching a given selector.
86 87 88 89 |
# File 'lib/mongo/grid/fs_bucket.rb', line 86 def find(selector = nil, = {}) opts = .merge(read: read_preference) if read_preference files_collection.find(selector, opts || ) end |
#find_one(selector = nil) ⇒ Grid::File
Please use #find instead with a limit of -1. Will be removed in version 3.0.
Find a file in the GridFS.
107 108 109 110 111 112 |
# File 'lib/mongo/grid/fs_bucket.rb', line 107 def find_one(selector = nil) file_info = files_collection.find(selector).first return nil unless file_info chunks = chunks_collection.find(:files_id => file_info[:_id]).sort(:n => 1) Grid::File.new(chunks.to_a, Options::Mapper.transform(file_info, Grid::File::Info::MAPPINGS.invert)) end |
#insert_one(file) ⇒ BSON::ObjectId
Please use #upload_from_stream or #open_upload_stream instead. Will be removed in version 3.0.
Insert a single file into the GridFS.
127 128 129 130 131 132 |
# File 'lib/mongo/grid/fs_bucket.rb', line 127 def insert_one(file) @indexes ||= ensure_indexes! chunks_collection.insert_many(file.chunks) files_collection.insert_one(file.info) file.id end |
#open_download_stream(id) {|The| ... } ⇒ Stream::Read
Opens a stream from which a file can be downloaded, specified by id.
216 217 218 219 220 221 222 223 |
# File 'lib/mongo/grid/fs_bucket.rb', line 216 def open_download_stream(id) read_stream(id).tap do |stream| if block_given? yield stream stream.close end end end |
#open_download_stream_by_name(filename, opts = {}) {|The| ... } ⇒ Stream::Read
Opens a stream from which the application can read the contents of the stored file specified by filename and the revision in options.
Revision numbers are defined as follows: 0 = the original stored file 1 = the first revision 2 = the second revision etc…-2 = the second most recent revision -1 = the most recent revision
# @example Open a stream to download the original file.
fs.open_download_stream_by_name('some-file.txt', revision: 0)
277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 |
# File 'lib/mongo/grid/fs_bucket.rb', line 277 def open_download_stream_by_name(filename, opts = {}, &block) revision = opts.fetch(:revision, -1) if revision < 0 skip = revision.abs - 1 sort = { 'uploadDate' => Mongo::Index::DESCENDING } else skip = revision sort = { 'uploadDate' => Mongo::Index::ASCENDING } end file_doc = files_collection.find({ filename: filename} , projection: { _id: 1 }, sort: sort, skip: skip, limit: -1).first unless file_doc raise Error::FileNotFound.new(filename, :filename) unless opts[:revision] raise Error::InvalidFileRevision.new(filename, opts[:revision]) end open_download_stream(file_doc[:_id], &block) end |
#open_upload_stream(filename, opts = {}) {|The| ... } ⇒ Stream::Write
Opens an upload stream to GridFS to which the contents of a user file came be written.
356 357 358 359 360 361 362 363 |
# File 'lib/mongo/grid/fs_bucket.rb', line 356 def open_upload_stream(filename, opts = {}) write_stream(filename, opts).tap do |stream| if block_given? yield stream stream.close end end end |
#prefix ⇒ String
Get the prefix for the GridFS
167 168 169 |
# File 'lib/mongo/grid/fs_bucket.rb', line 167 def prefix @options[:fs_name] || @options[:bucket_name]|| DEFAULT_ROOT end |
#read_preference ⇒ Mongo::ServerSelector
Get the read preference.
412 413 414 |
# File 'lib/mongo/grid/fs_bucket.rb', line 412 def read_preference @read_preference ||= [:read] || database.read_preference end |
#upload_from_stream(filename, io, opts = {}) ⇒ BSON::ObjectId
Uploads a user file to a GridFS bucket. Reads the contents of the user file from the source stream and uploads it as chunks in the chunks collection. After all the chunks have been uploaded, it creates a files collection document for the filename in the files collection.
390 391 392 393 394 395 396 397 398 399 400 401 402 |
# File 'lib/mongo/grid/fs_bucket.rb', line 390 def upload_from_stream(filename, io, opts = {}) open_upload_stream(filename, opts) do |stream| begin stream.write(io) rescue IOError begin stream.abort rescue Error::OperationFailure end raise end end.file_id end |
#write_concern ⇒ Mongo::WriteConcern
Get the write concern.
424 425 426 427 |
# File 'lib/mongo/grid/fs_bucket.rb', line 424 def write_concern @write_concern ||= @options[:write] ? WriteConcern.get(@options[:write]) : database.write_concern end |