类:Mongo::Grid::FSBucket

继承:
对象
  • 对象
显示全部
扩展方式:
可转发
定义于:
lib/ Mongo/grid/fs_bucket.rb
lib/ Mongo/grid/ 流.rb、
lib/ Mongo/grid/ 流/read.rb、
lib/ Mongo/grid/ 流/ 写入.rb

Overview

表示数据库中 GridFS 的视图。

由于:

  • 2.0.0

在命名空间下定义

模块: Stream

常量摘要折叠

DEFAULT_ROOT =

默认根前缀。

由于:

  • 2.0.0

' fs '.冻结
CHUNKS_INDEX =

数据段集合索引的规范。

由于:

  • 2.0.0

{ :files_id => 1, :n => 1 }.冻结
FILES_INDEX =

文件集合索引的规范。

由于:

  • 2.1.0

{ 文件名: 1, uploadDate: 1 }.冻结

实例属性摘要折叠

实例方法摘要折叠

构造函数详情

#initialize(database, options = {}) ⇒ FSBucket

创建GridFS。

例子:

创建GridFS。

Grid::FSBucket.new(database)

参数:

  • database (数据库)

    文件所在的数据库。

  • 选项 哈希 (默认为: {}

    GridFS选项。

选项哈希 ( options ):

  • :bucket_name string

    文件和数据段集合的前缀。

  • :chunk_size 整数

    覆盖默认数据块大小。

  • :fs_name string

    文件和数据段集合的前缀。

  • :read 哈希

    读取偏好选项。 哈希可能包含以下项目:

    • :模式—读取偏好(read preference),指定为符号;有效值为: 主节点 (primary node in the replica set):primary_preferred: secondary_preferred:nearest

    • :tag_sets – 哈希数组。

    • :local_threshold

  • :session 会话

    要使用的会话。

  • :write 哈希

    已弃用。 相当于 :write_concern 选项。

  • :write_concern 哈希

    写关注(write concern)选项。 可以是 :w => 整数|字符串、: fsync => 布尔值、:j => 布尔值。

由于:

  • 2.0.0



70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/ Mongo/grid/fs_bucket.rb', line 70

def 初始化(database, 选项 = {})
  @database = database
  @options = 选项.dup
=begin WriteConcern 对象支持
  if @options[:write_concern].is_a?(WriteConcern::Base)
    # 缓存实例,以便我们不会不必要地重建它。
    @write_concern = @options[:write_concern]
    @options[:write_concern] = @write_concern.options
  end
=end
  @options.冻结
  @chunks_collection = database[chunks_name]
  @files_collection = database[files_name]
end

实例属性详细信息

# chunks_collection集合(只读)

返回 chunks_collection 数据段集合。

返回:

  • ( Collection )

    chunks_collection 数据段集合。

由于:

  • 2.0.0



88
89
90
# File 'lib/ Mongo/grid/fs_bucket.rb', line 88

def chunks_collection
  @chunks_collection
end

#databaseDatabase (readonly)

返回数据库 数据库。

返回:

由于:

  • 2.0.0



93
94
95
# File 'lib/ Mongo/grid/fs_bucket.rb', line 93

def database
  @database
end

# files_collection集合(只读)

返回 files_collection 文件集合。

返回:

  • ( Collection )

    files_collection 文件集合。

由于:

  • 2.0.0



98
99
100
# File 'lib/ Mongo/grid/fs_bucket.rb', line 98

def files_collection
  @files_collection
end

# options哈希(只读)

返回 options FSBucket 选项。

返回:

  • (哈希)

    options FSBucket 选项。

由于:

  • 2.1.0



103
104
105
# File 'lib/ Mongo/grid/fs_bucket.rb', line 103

def 选项
  @options
end

实例方法详细信息

# 删除 (ID, opts = {}) ⇒ 结果

从 GridFS 中删除由其ID标识的单个文件。

例子:

从GridFS中删除文件。

fs.delete(id)

参数:

  • id ( BSON::ObjectId , Object )

    要删除的文件的ID 。

返回:

  • (结果)

    删除的结果。

引发:

由于:

  • 2.1.0



220
221
222
223
224
225
226
227
228
229
230
# File 'lib/ Mongo/grid/fs_bucket.rb', line 220

def 删除(id, opts = {})
  timeout_holder = CsotTimeoutHolder.new(operation_timeups: operation_timeups(opts))
  结果 = files_collection
    .find({ :_id => id }, @options.合并(merge)(timeout_ms: timeout_holder.剩余超时毫秒))
    .delete_one(timeout_ms: timeout_holder.剩余超时毫秒)
  chunks_collection
    .find({ :files_id => id }, @options.合并(merge)(timeout_ms: timeout_holder.剩余超时毫秒))
    .delete_many(timeout_ms: timeout_holder.剩余超时毫秒)
  提高 错误::FileNotFound.new(id, :id) if 结果.n == 0
  结果
end

# delete_one (文件, opts = {}) ⇒ 结果

从GridFS中删除单个文件。

例子:

从GridFS中删除文件。

fs.delete_one(file)

参数:

返回:

  • (结果)

    删除的结果。

由于:

  • 2.0.0



204
205
206
# File 'lib/ Mongo/grid/fs_bucket.rb', line 204

def delete_one(文件, opts = {})
  删除(文件.id, opts)
end

# download_to_stream ( ID , io) ⇒对象

下载量ID指定的文件内容并将其写入目标 io对象。

例子:

下载文件并将其写入io对象。

fs.download_to_stream(id, io)

参数:

  • id ( BSON::ObjectId , Object )

    要读取的文件的 ID。

  • io ( IO )

    要写入的 io 对象。

由于:

  • 2.1.0



271
272
273
274
275
276
277
# File 'lib/ Mongo/grid/fs_bucket.rb', line 271

def download_to_stream(id, io)
  open_download_stream(id) do ||
    . do |数据段|
      io << 数据段
    end
  end
end

# download_to_stream_by_name (filename, io, opts = {}) ⇒对象

下载量由 filename 和 options 中的修订版本指定的存储文件的内容,并将内容写入目标 io对象。

修订号定义如下: 0 = 原始存储的文件1 = 第一个修订2 = 第二个修订,依此类推 - 2 = 第二个最新修订 - 1 = 最新修订

# @example 下载原始文件。

fs.download_to_stream_by_name('some-file.txt', io, revision: 0)

例子:

下载最新版本。

fs.download_to_stream_by_name('some-file.txt', io)

下载已存储文件的第二个修订版。

fs.download_to_stream_by_name('some-file.txt', io, revision: 2)

参数:

  • 文件名 ( string )

    文件的名称。

  • io ( IO )

    要写入的 io 对象。

  • opts 哈希 (默认为: {}

    下载选项。

选项哈希 ( opts ):

  • :revision 整数

    要下载的文件的修订版本号。 默认为 - 1 ,即最新版本。

引发:

由于:

  • 2.1.0



364
365
366
# File 'lib/ Mongo/grid/fs_bucket.rb', line 364

def download_to_stream_by_name(文件名, io, opts = {})
  download_to_stream(open_download_stream_by_name(文件名, opts).file_id, io)
end

# drop (opts = {}) ⇒ 对象

删除实现此存储桶的集合。

由于:

  • 2.0.0



493
494
495
496
497
# File 'lib/ Mongo/grid/fs_bucket.rb', line 493

def 删除(opts = {})
  上下文 = 操作::上下文.new(operation_timeups: operation_timeups(opts))
  files_collection.删除(timeout_ms: 上下文.剩余超时毫秒)
  chunks_collection.删除(timeout_ms: 上下文.剩余超时毫秒)
end

# find (selector = nil, options = {}) ⇒ CollectionView

查找与给定选择器匹配的文件集合文档。

例子:

按文件名查找文件集合文档。

fs.find(filename: 'file.txt')

参数:

  • 选择器 哈希 (默认为: nil

    查找中使用的选择器。

  • 选项 哈希 (默认为: {}

    用于查找的选项。

选项哈希 ( options ):

  • :allow_disk_use ( true , false )

    服务器在执行查找操作时是否可以写入临时数据写入磁盘。

  • :batch_size 整数

    MongoDB批处理结果中返回的文档数量。

  • :limit 整数

    从查询中返回的最大Docs数。

  • :no_cursor_timeout ( true , false )

    服务器通常会在不活动期( 10分钟)后使空闲游标超时,以防止过度使用内存。 设置此选项可防止出现这种情况。

  • :skip 整数

    返回结果之前要跳过的Docs数。

  • :sort 哈希

    对结果设立进行排序的键和方向对。

返回:

  • ( CollectionView )

    集合视图。

由于:

  • 2.1.0



134
135
136
137
# File 'lib/ Mongo/grid/fs_bucket.rb', line 134

def find(选择器 = nil, 选项 = {})
  opts = 选项.合并(merge)(读取: read_preference) if read_preference
  files_collection.find(选择器, opts || 选项)
end

# find_one (selector = nil) ⇒ Grid::File

已弃用。

请改用 #find,限制为 - 1 。 将在版本3.0中删除。

在GridFS中查找文件。

例子:

通过 ID 查找文件。

fs.find_one(_id: id)

通过文件名查找文件。

fs.find_one(filename: 'test.txt')

参数:

  • 选择器 哈希 (默认为: nil

    选择器。

返回:

由于:

  • 2.0.0



155
156
157
158
159
160
# File 'lib/ Mongo/grid/fs_bucket.rb', line 155

def find_one(选择器 = nil)
  file_info = files_collection.find(选择器).first
  return nil 除非 file_info
  数据块 = chunks_collection.find(:files_id => file_info[:_id]).sort(:n => 1)
  网格::file.new(数据块.to_a, 选项::映射器.转换(Transform)(file_info, 网格::file::信息::mappings.反转))
end

#insert_one(file) ⇒ BSON::ObjectId

已弃用。

请改用 #upload_from_stream 或 #open_upload_stream。 将在版本3.0中删除。

将单个文件插入 GridFS。

例子:

插入单个文件。

fs.insert_one(file)

参数:

返回:

  • ( BSON::ObjectId )

    文件 ID。

由于:

  • 2.0.0



175
176
177
178
179
180
# File 'lib/ Mongo/grid/fs_bucket.rb', line 175

def insert_one(文件)
  @indexes ||= ensure_indexes!
  chunks_collection.insert_many(文件.数据块)
  files_collection.insert_one(文件.信息)
  文件.id
end

# open_download_stream ( ID , options = nil) {|The| ... } = "Stream::Read"

打开可从中下载文件的流,文件由ID指定。

例子:

打开可从中下载文件的流。

fs.open_download_stream(id)

参数:

  • id ( BSON::ObjectId , Object )

    要读取的文件的 ID。

  • 选项 哈希 (默认为: nil

    选项。

选项哈希 ( options ):

  • :file_info_doc ( BSON::Document )

    仅供内部驱动程序使用。 用作文件信息的 BSON 文档。

收益参数:

  • 使用 (哈希)

    读取流。

返回:

由于:

  • 2.1.0



248
249
250
251
252
253
254
255
256
257
258
259
# File 'lib/ Mongo/grid/fs_bucket.rb', line 248

def open_download_stream(id, 选项 = nil)
  选项 = Utils.shallow_symbolize_keys(选项 || {})
  read_stream(id, **选项).点击 do ||
    if block_given?
      开始
        产量 
      确保
        .关闭
      end
    end
  end
end

# open_download_stream_by_name (filename, opts = {}) {|The| ... } = "Stream::Read"

打开一个流,应用程序可以从中读取由文件名和选项中的修订版本指定的存储文件的内容。

修订号定义如下: 0 = 原始存储的文件1 = 第一个修订2 = 第二个修订,依此类推 - 2 = 第二个最新修订 - 1 = 最新修订

# @example 打开流以下载原始文件。

fs.open_download_stream_by_name('some-file.txt', revision: 0)

例子:

打开流以下载最新版本。

fs.open_download_stream_by_name('some-file.txt')

打开流以下载所存储文件的第二个修订版。

fs.open_download_stream_by_name('some-file.txt', revision: 2)

参数:

  • 文件名 ( string )

    文件的名称。

  • opts 哈希 (默认为: {}

    下载选项。

选项哈希 ( opts ):

  • :revision 整数

    要下载的文件的修订版本号。 默认为 - 1 ,即最新版本。

收益参数:

  • 使用 (哈希)

    读取流。

返回:

引发:

由于:

  • 2.1.0



313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
# File 'lib/ Mongo/grid/fs_bucket.rb', line 313

def open_download_stream_by_name(文件名, opts = {}, )
  修订 = opts.获取(:revision, -1)
  if 修订 < 0
    跳过 = 修订.abs - 1
    sort = { ' uploadDate ' => mongo::Index::降序 }
  else
    跳过 = 修订
    sort = { ' uploadDate ' => mongo::Index::升序 }
  end
  file_info_doc = files_collection.find({ 文件名: 文件名} ,
                                     sort: sort,
                                     skip: 跳过,
                                     limit: -1).first
  除非 file_info_doc
    提高 错误::FileNotFound.new(文件名, :filename) 除非 opts[:revision]
    提高 错误::InvalidFileRevision.new(文件名, opts[:revision])
  end
  open_download_stream(file_info_doc[:_id], file_info_doc: file_info_doc, )
end

# open_upload_stream (filename, opts = {}) {|The| ... } = "Stream::Write"

打开到 GridFS 的上传流,可以向其中写入文件或 blob 的内容。

参数:

  • 文件名 ( string )

    GridFS中的文件名称。

  • opts 哈希 (默认为: {}

    写入流的选项。

  • 选项 (哈希)

    一组可自定义的选项

选项哈希 ( opts ):

  • :file_id 对象

    可选的唯一文件ID。 如果未提供文件ID,则会自动生成BSON ::ObjectId。

  • :chunk_size 整数

    覆盖默认数据块大小。

  • :metadata 哈希

    文件集合文档“元数据”字段的用户数据。

  • :content_type string

    文件的内容类型。 已弃用,请改用元数据文档。

  • :aliases ( Array<String> )

    别名列表。 已弃用,请改用元数据文档。

收益参数:

  • 使用 (哈希)

    写入流。

返回:

由于:

  • 2.1.0



394
395
396
397
398
399
400
401
402
403
404
405
# File 'lib/ Mongo/grid/fs_bucket.rb', line 394

def open_upload_stream(文件名, opts = {})
  opts = Utils.shallow_symbolize_keys(opts)
  write_stream(文件名, **opts).点击 do ||
    if block_given?
      开始
        产量 
      确保
        .关闭
      end
    end
  end
end

# prefixstring

获取 GridFS 的前缀

例子:

获取前缀。

fs.prefix

返回:

  • ( string )

    GridFS 前缀。

由于:

  • 2.0.0



190
191
192
# File 'lib/ Mongo/grid/fs_bucket.rb', line 190

def prefix
  @options[:fs_name] || @options[:bucket_name] || DEFAULT_ROOT
end

# read_preferenceBSON::Document

注意:

此方法始终返回BSON::Document实例,即使 FSBucket 构造函数将 :read 的类型指定为哈希,而不是BSON::Document。

获取读取偏好。

返回:

  • ( BSON::Document )

    读取偏好。 该文档可能包含以下字段:

    • :模式—读取偏好(read preference),指定为符号;有效值为: 主节点 (primary node in the replica set):primary_preferred: secondary_preferred:nearest

    • :tag_sets – 哈希数组。

    • :local_threshold

由于:

  • 2.0.0



465
466
467
468
469
470
471
472
473
474
# File 'lib/ Mongo/grid/fs_bucket.rb', line 465

def read_preference
  @read_preference ||= 开始
    pref = 选项[:read] || database.read_preference
    if BSON::文档 === pref
      pref
    else
      BSON::文档.new(pref)
    end
  end
end

#upload_from_stream(filename, io, opts = {}) ⇒ BSON::ObjectId

将用户文件上传到GridFS存储桶。 从流读取用户文件的内容,并将其作为数据段上传到数据段集合中。 上传所有数据段后,它会为 files 集合中的 filename 创建一个文件集合文档。

例子:

将文件上传到GridFS存储桶。

fs.upload_from_stream('a-file.txt', file)

参数:

  • 文件名 ( string )

    要上传的文件的文件名。

  • io ( IO )

    要从中上传的源 io流。

  • opts 哈希 (默认为: {}

    写入流的选项。

  • 选项 (哈希)

    一组可自定义的选项

选项哈希 ( opts ):

  • :file_id 对象

    可选的唯一文件ID。 否则会生成 ObjectId。

  • :chunk_size 整数

    覆盖默认数据块大小。

  • :metadata 哈希

    文件集合文档“元数据”字段的用户数据。

  • :content_type string

    文件的内容类型。 已弃用,请改用元数据文档。

  • :aliases ( Array<String> )

    别名列表。 已弃用,请改用元数据文档。

返回:

  • ( BSON::ObjectId )

    ObjectId 文件 ID。

由于:

  • 2.1.0



435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
# File 'lib/ Mongo/grid/fs_bucket.rb', line 435

def upload_from_stream(文件名, io, opts = {})
  open_upload_stream(文件名, opts) do ||
    开始
      .(io)
    # IOError 和 SystemCallError 用于读取 io.
    # Error::SocketError 和 Error::SocketTimeoutError 用于
    # 写入 MongoDB。
    救援 IOError, SystemCallError, 错误::SocketError, 错误::SocketTimeoutError
      开始
        .中止
      救援 错误::OperationFailure
      end
      提高
    end
  end.file_id
end

# write_concernMongo::WriteConcern

获取写关注(write concern)。

例子:

获取写关注(write concern)。

stream.write_concern

返回:

由于:

  • 2.1.0



484
485
486
487
488
489
490
# File 'lib/ Mongo/grid/fs_bucket.rb', line 484

def write_concern
  @write_concern ||= if wco = @options[:write_concern] || @options[:write]
    writeConcern.获取(wco)
  else
    database.write_concern
  end
end