클래스: Mongo::Grid::FSBucket

상속:
객체
  • 객체
모두 표시
확장자:
전달 가능
다음에 정의됨:
lib/ Mongo/grid/fs_bucket.rb,
lib/ Mongo/grid/ 스트림.rb,
lib/ Mongo/grid/ 스트림/read.rb,
lib/ Mongo/grid/ 스트림/ 쓰기 (write).rb

개요

데이터베이스에 있는 GridFS의 뷰를 나타냅니다.

이후:

  • 2.0.0

네임스페이스 아래에 정의됨

모듈: 스트림

상수 요약 접기

DEFAULT_ROOT =

기본값 루트 접두사입니다.

이후:

  • 2.0.0

'fs'
CHUNKS_INDEX =

청크 컬렉션 인덱스의 사양입니다.

이후:

  • 2.0.0

{ 파일 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_preferred, :세컨더리, :secondary_preferred:nearest입니다.
    • :tag_sets -- 해시 배열 .
    • :local_threshold.
  • :session (세션)

    사용할 세션입니다.

  • :write (해시)

    더 이상 사용되지 않습니다. :write_concern 옵션과 동일합니다.

  • :write_concern (해시)

    쓰기 고려 (write concern) 옵션. :w => Integer|String, : fsync => Boolean, :j => Boolean일 수 있습니다.

이후:

  • 2.0.0



68
69
70
71
72
73
74
75
76
77
78
79
80
# 파일 'lib/ Mongo/grid/fs_bucket.rb', 줄 68

def 초기화(database, 옵션 = {})
  @database = database
  @options = 옵션.dup
  # WriteConcern 객체 지원
  # if @options[:write_concern].is_a?(WriteConcern::Base)
  # # 인스턴스 를 캐시하여 불필요하게 재구성하지 않도록 합니다.
  # @write_concern = @options[:write_concern]
  # @options[:write_concern] = @write_concern.options
  #         end
  @options.동결
  @chunks_collection = database[chunks_name]
  @files_collection = database[파일 이름]
end

인스턴스 속성 세부 정보

#chunks_collection컬렉션 (읽기 전용)

반환값 chunks_collection 청크 컬렉션 입니다.

반환합니다:

  • (컬렉션)

    chunks_collection 청크 컬렉션 입니다.

이후:

  • 2.0.0



85
86
87
# 파일 'lib/ Mongo/grid/fs_bucket.rb', 줄 85

def chunks_collection
  @chunks_collection
end

#databaseDatabase (readonly)

반환 데이터베이스 데이터베이스입니다.

반환합니다:

이후:

  • 2.0.0



90
91
92
# 파일 'lib/ Mongo/grid/fs_bucket.rb', 줄 90

def database
  @database
end

#파일 컬렉션컬렉션 (읽기 전용)

반환값 파일 컬렉션 파일 컬렉션 입니다.

반환합니다:

  • (컬렉션)

    file_collection 파일 컬렉션 입니다.

이후:

  • 2.0.0



95
96
97
# 파일 'lib/ Mongo/grid/fs_bucket.rb', 줄 95

def 파일 컬렉션
  @files_collection
end

#options해시 (읽기 전용)

반환 옵션 FSBucket 옵션입니다.

반환합니다:

  • (해시)

    options FSBucket 옵션입니다.

이후:

  • 2.1.0



100
101
102
# 파일 'lib/ Mongo/grid/fs_bucket.rb', 줄 100

def 옵션
  @options
end

인스턴스 메서드 세부 정보

#삭제(ID, opts = {}) ⇒ Result

GridFS에서 ID로 식별되는 단일 파일을 제거합니다.

예시:

GridFS 에서 파일 을 제거합니다.

fs.delete(id)

매개변수:

  • id (BSON::ObjectId, Object)

    제거 파일 의 ID입니다.

반환합니다:

  • (결과)

    제거 결과입니다.

다음을 발생시킵니다.

이후:

  • 2.1.0



218
219
220
221
222
223
224
225
226
227
228
229
# 파일 'lib/ Mongo/grid/fs_bucket.rb', 줄 218

def 삭제(id, opts = {})
  timeout_holder = CsotTimeoutHolder.신규(operation_timeout: operation_timeout(opts))
  결과 = 파일 컬렉션
           .찾기({ _id: id }, @options.merge(timeout_ms: timeout_holder.나머지_시간 초과_ms))
           .delete_one(timeout_ms: timeout_holder.나머지_시간 초과_ms)
  chunks_collection
    .찾기({ 파일 ID: id }, @options.merge(timeout_ms: timeout_holder.나머지_시간 초과_ms))
    .delete_many(timeout_ms: timeout_holder.나머지_시간 초과_ms)
  올리다 오류::FileNotFound.신규(id, :id) 만약 결과.n == 0

  결과
end

#delete_one(파일, opts = {}) ⇒ Result

GridFS 에서 단일 파일 을 제거합니다.

예시:

GridFS 에서 파일 을 제거합니다.

fs.delete_one(file)

매개변수:

  • 파일 (Grid::File)

    제거 파일 입니다.

반환합니다:

  • (결과)

    제거 결과입니다.

이후:

  • 2.0.0



202
203
204
# 파일 'lib/ Mongo/grid/fs_bucket.rb', 줄 202

def delete_one(파일, opts = {})
  삭제(파일.id, opts)
end

#download_to_stream(ID, io) ⇒ 객체

ID 로 지정된 파일 의 내용을 다운로드 하여 대상 io 객체 에 씁니다.

예시:

파일 을 다운로드하여 io 객체 에 쓰기 (write) .

fs.download_to_stream(id, io)

매개변수:

  • id (BSON::ObjectId, Object)

    읽을 파일 의 ID입니다.

  • io (IO)

    쓸 io 객체입니다.

이후:

  • 2.1.0



270
271
272
273
274
275
276
# 파일 'lib/ Mongo/grid/fs_bucket.rb', 줄 270

def download_to_stream(id, io)
  open_download_stream(id) do |스트림|
    스트림. do |청크|
      io << 청크
    end
  end
end

#download_to_stream_by_name(filename, io, opts = {}) ⇒ 객체

options 의 파일 이름 및 수정본으로 지정된 저장된 파일 의 내용을 다운로드 하고 대상 io 객체 에 내용을 씁니다.

수정본 번호는 다음과 같이 정의됩니다: 0 = 원래 저장된 파일 1 = 첫 번째 수정본 2 = 두 번째 수정본 등... -2 = 두 번째로 최근 수정본 -1 = 가장 최근 수정본

예시 원본 파일 다운로드합니다.

fs.download_to_stream_by_name('some-file.txt', io, 수정본: 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
# 파일 'lib/ Mongo/grid/fs_bucket.rb', 줄 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



491
492
493
494
495
# 파일 'lib/ Mongo/grid/fs_bucket.rb', 줄 491

def 제거(opts = {})
  컨텍스트 = 작업::Context.신규(operation_timeout: operation_timeout(opts))
  파일 컬렉션.제거(timeout_ms: 컨텍스트.나머지_시간 초과_ms)
  chunks_collection.제거(timeout_ms: 컨텍스트.나머지_시간 초과_ms)
end

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

지정된 선택기와 일치하는 파일 컬렉션 문서를 찾습니다.

예시:

파일 이름으로 파일 컬렉션 문서를 찾습니다.

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

매개변수:

  • 선택기 (해시) (기본값: nil)

    찾기에 사용할 선택기입니다.

  • 옵션 (해시) (기본값: {})

    찾기 옵션입니다.

옵션 해시(options):

  • :allow_disk_use (true, false)

    서버 가 찾기 작업을 실행하는 동안 디스크에 임시 데이터를 쓰기 (write) 수 있는지 여부입니다.

  • :batch_size (정수)

    MongoDB 의 각 결과 배치 에서 반환된 문서 수입니다.

  • :limit (정수)

    쿼리 에서 반환할 Docs 의 최대 개수입니다.

  • :no_cursor_timeout (true, false)

    서버 는 일반적으로 과도한 메모리 사용을 방지하기 위해 비활성 기간(10 분) 후에 유휴 커서의 시간을 초과합니다. 이를 방지하려면 이 옵션을 설정합니다.

  • :skip (정수)

    결과를 반환하기 전에 건너뛸 Docs 의 수입니다.

  • :sort (해시)

    결과 설정하다 의 정렬 기준이 되는 키 및 방향 쌍입니다.

반환합니다:

  • (CollectionView)

    컬렉션 보기입니다.

이후:

  • 2.1.0



131
132
133
134
# 파일 'lib/ Mongo/grid/fs_bucket.rb', 줄 131

def 찾기(선택기 = nil, 옵션 = {})
  opts = 옵션.merge(읽기: read_preference) 만약 read_preference
  파일 컬렉션.찾기(선택기, opts || 옵션)
end

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

더 이상 사용되지 않습니다.

-1 제한을 가진 #find 를 대신 사용하세요. 버전 3.0 에서 제거될 예정입니다.

GridFS 에서 파일 을 찾습니다.

예시:

ID로 파일 을 찾습니다.

fs.find_one(_id: id)

파일 이름으로 파일 을 찾습니다.

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

매개변수:

  • 선택기 (해시) (기본값: nil)

    선택기.

반환합니다:

이후:

  • 2.0.0



152
153
154
155
156
157
158
# 파일 'lib/ Mongo/grid/fs_bucket.rb', 줄 152

def find_one(선택기 = nil)
  file_info = 파일 컬렉션.찾기(선택기).first
  반환 nil 하지 않는 한 file_info

  청크 = chunks_collection.찾기(파일 ID: file_info[:_id]).sort(n: 1)
  그리드::file.신규(청크.to_a, 옵션::매퍼.변환(file_info, 그리드::file::정보::지도 제작.반전))
end

#insert_one(file) ⇒ BSON::ObjectId

더 이상 사용되지 않습니다.

대신 #upload_from_stream 또는 #open_upload_stream을 사용하세요. 버전 3.0 에서 제거될 예정입니다.

GridFS에 단일 파일을 삽입합니다.

예시:

단일 파일 을 삽입합니다.

fs.insert_one(file)

매개변수:

  • 파일 (Grid::File)

    삽입할 파일입니다.

반환합니다:

  • (BSON::ObjectId)

    파일 ID입니다.

이후:

  • 2.0.0



173
174
175
176
177
178
# 파일 'lib/ Mongo/grid/fs_bucket.rb', 줄 173

def insert_one(파일)
  @indexes ||= ensure_indexes!
  chunks_collection.insert_many(파일.청크)
  파일 컬렉션.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



247
248
249
250
251
252
253
254
255
256
257
258
# 파일 'lib/ Mongo/grid/fs_bucket.rb', 줄 247

def open_download_stream(id, 옵션 = nil)
  옵션 = Utils.shallow_symbolize_keys(옵션 || {})
  read_stream(id, **옵션). do |스트림|
    만약 block_given?
      시작
        yield 스트림
      보장
        스트림.닫기
      end
    end
  end
end

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

애플리케이션 이 옵션의 파일 이름 및 수정본으로 지정된 저장된 파일 의 내용을 읽을 수 있는 스트림 을 엽니다.

수정본 번호는 다음과 같이 정의됩니다: 0 = 원래 저장된 파일 1 = 첫 번째 수정본 2 = 두 번째 수정본 등... -2 = 두 번째로 최근 수정본 -1 = 가장 최근 수정본

예시 스트림 열어 원본 파일 다운로드 .

fs.open_download_stream_by_name('some-file.txt', 수정본: 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



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

def open_download_stream_by_name(파일 이름, opts = {}, &차단)
  수정본 = opts.가져오기(:revision, -1)
  만약 수정본 < 0
    건너뛰기 = 수정본.abs - 1
    sort = { 'uploadDate' => mongo::Index::내림차순 }
  other
    건너뛰기 = 수정본
    sort = { 'uploadDate' => mongo::Index::오름차순 }
  end
  file_info_doc = 파일 컬렉션.찾기({ 파일 이름: 파일 이름 },
                                        sort: sort,
                                        건너뛰기: 건너뛰기,
                                        limit: -1).first
  하지 않는 한 file_info_doc
    올리다 오류::FileNotFound.신규(파일 이름, :filename) 하지 않는 한 opts[:revision]

    올리다 오류::InvalidFileRevision.신규(파일 이름, 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에 대한 업로드 스트림을 엽니다.

매개변수:

  • 파일 이름 (string)

    GridFS 의 파일 이름입니다.

  • opts (해시) (기본값: {})

    쓰기 (write) 스트림 에 대한 옵션입니다.

  • 옵션 (해시)

    사용자 지정 가능한 옵션 세트

옵션 해시(opts):

  • :file_id (객체)

    선택 사항인 고유 파일 ID입니다. 파일 ID를 제공하지 않으면 BSON ::ObjectId가 자동으로 생성됩니다.

  • :chunk_size (정수)

    기본값 청크 크기를 재정의합니다.

  • :metadata (해시)

    파일 컬렉션 문서 의 ' 메타데이터' 필드 에 대한 사용자 데이터입니다.

  • :content_type (string)

    파일 의 콘텐츠 유형입니다. 지원이 중단되었습니다. 대신 메타데이터 문서 를 사용하세요.

  • :aliases (Array<String>)

    별칭 목록입니다. 지원이 중단되었습니다. 대신 메타데이터 문서 를 사용하세요.

수율 매개변수:

  • (해시)

    쓰기 (write) 스트림.

반환합니다:

이후:

  • 2.1.0



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

def open_upload_stream(파일 이름, opts = {})
  opts = Utils.shallow_symbolize_keys(opts)
  write_stream(파일 이름, **opts). do |스트림|
    만약 block_given?
      시작
        yield 스트림
      보장
        스트림.닫기
      end
    end
  end
end

#접두사string

GridFS의 접두사 가져오기

예시:

접두사를 가져옵니다.

fs.prefix

반환합니다:

  • (string)

    GridFS 접두사입니다.

이후:

  • 2.0.0



188
189
190
# 파일 'lib/ Mongo/grid/fs_bucket.rb', 줄 188

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

#read_preferenceBSON::Document

참고:

이 메서드는 FSBucket 생성자가 :read 유형을 BSON ::Document가 아닌 해시로 지정하더라도 항상 BSON::Document 인스턴스 를 반환합니다.

읽기 설정을 가져옵니다.

반환합니다:

  • (BSON::Document)

    읽기 설정. 문서에는 다음과 같은 필드가 있을 수 있습니다.

    • :모드 -- 기호로 지정된 읽기 설정 (read preference). 유효한 값은 :프라이머리, :primary_preferred, :세컨더리, :secondary_preferred:nearest입니다.
    • :tag_sets -- 해시 배열 .
    • :local_threshold.

이후:

  • 2.0.0



463
464
465
466
467
468
469
470
471
472
# 파일 'lib/ Mongo/grid/fs_bucket.rb', 줄 463

def read_preference
  @read_preference ||= 시작
    pref = 옵션[:read] || database.read_preference
    만약 pref.is_a?(BSON::문서)
      pref
    other
      BSON::문서.신규(pref)
    end
  end
end

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

사용자 파일 을 GridFS 버킷에 업로드합니다. 소스 스트림 에서 사용자 파일 의 내용을 읽고 이를 청크 컬렉션 에 청크로 업로드합니다. 모든 청크가 업로드된 후에는 파일 컬렉션 의 파일 이름에 대한 파일 컬렉션 문서 를 생성합니다.

예시:

GridFS 버킷에 파일 을 업로드합니다.

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

매개변수:

  • 파일 이름 (string)

    업로드할 파일의 파일 이름입니다.

  • io (IO)

    업로드할 소스 io 스트림 입니다.

  • opts (해시) (기본값: {})

    쓰기 (write) 스트림 에 대한 옵션입니다.

  • 옵션 (해시)

    사용자 지정 가능한 옵션 세트

옵션 해시(opts):

  • :file_id (객체)

    선택 사항인 고유 파일 ID입니다. An ObjectId is generated otherwise.

  • :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
# 파일 'lib/ Mongo/grid/fs_bucket.rb', 줄 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.file_id
end

#write_concernMongo::WriteConcern

쓰기 고려 (write concern) 를 가져옵니다.

예시:

쓰기 고려 (write concern) 를 가져옵니다.

stream.write_concern

반환합니다:

이후:

  • 2.1.0



482
483
484
485
486
487
488
# 파일 'lib/ Mongo/grid/fs_bucket.rb', 줄 482

def write_concern
  @write_concern ||= 만약 wco = @options[:write_concern] || @options[:write]
                       writeConcern.get(wco)
                     other
                       database.write_concern
                     end
end