Classe: Mongo::Collection::View::ChangeStream

Herda:
Agregação
  • Objeto
mostrar tudo
Inclui:
Repetitivo
Definido em:
build/ruby-driver-v2.19/lib/mongo/collection/view/change_stream.rb,
build/ruby-driver-v2.19/lib/mongo/collection/view/change_stream/retryable.rb

Visão geral

Observação:

Disponível apenas nas versões de servidor 3.6 e superiores.

Observação:

Os ChangeStreams não funcionam corretamente com o JRuby devido ao problema documentado aqui: github.com/jruby/jruby/issues/{14212. Ou seja, JRuby avalia cuidadosamente #next em um enumerador em um thread de background verde, portanto, chamar #next no change stream fará com que getMores seja chamado em um loop no background.

Fornece comportamento em torno de um estágio de pipeline '$changeStream' na estrutura de agregação . A especificação desse estágio permite que os usuários solicitem o envio de notificações para todas as alterações em uma coleção ou banco de dados de dados específico.

Desde:

  • 2.5.0

Definido sob namespace

Módulos: Repetitivo

Colapsode resumo constante

FULL_DOCUMENT_DEFAULT =

Retorna o valor padrão da opção fullDocument.

Retorna:

  • (string)

    O valor padrão da opção fullDocument.

Desde:

  • 2.5.0

'padrão'.congelar
DATABASE =

Retorna Usado para indicar que o fluxo de alterações deve escutar alterações em todo o banco de dados de dados e não apenas na coleção.

Retorna:

  • (Símbolo)

    Usado para indicar que o change stream deve escutar alterações em todo o banco de dados de dados e não apenas na collection.

Desde:

  • 2.6.0

:database
CLUSTER =

Retorna Usado para indicar que o fluxo de alterações deve escutar alterações em todo o cluster em vez de apenas na coleção.

Retorna:

  • (Símbolo)

    Usado para indicar que o change stream deve escutar alterações em todo o cluster em vez de apenas na coleção.

Desde:

  • 2.6.0

:cluster

Constantes herdadas da agregação

Agregação::REROOUTE

Constantes incluídas do Loggable

Loggable::Prefix

Constantes incluídas de Explainable

Explicável::ALL_PLANS_EXECUTION, Explicável:: EXECUTION_STATS , Explicável::QUERY_PLANNER

Recolhimento do Resumo do atributo de instância

Atributos herdados da agregação

#view

Atributos incluídos no Iterable

#cursor

Recolhimento do Resumo do método de instância

Métodos herdados de Aggregation

#allow_disk_use, #explain, #write?

Métodos incluídos no Retryable

#read_worker, #select_server, #write_worker

Métodos incluídos no Loggable

#log_debug, #log_error, #log_fatal, #log_info, #log_WARN, #logger

Métodos incluídos no Explainable

#explain

Métodos incluídos do Iterable

#close_query

Detalhes do construtor

#initialize(view, pipeline, change_for, options = {}) ➤ ChangeStream

Inicialize o change stream para a visualização de collection, pipeline e opções fornecidas.

Exemplos:

Crie a nova visualização do change stream.

ChangeStream.new(view, pipeline, options)

Parâmetros:

  • vista (Collection::View)

    A visualização da collection.

  • gasoduto (Array<Hash>)

    O pipeline de operadores para filtrar as notificações de alteração.

  • opções (Hash) (padrão para: {})

    As opções de change stream.

Hash de opções (opções):

  • :full_document (string)

    Valores permitidos: nil, 'default', 'updateLookup', 'whenAvailable', 'required'.

    O padrão é não enviar um valor (ou seja, nil), que é equivalente a "padrão". Por padrão, a notificação de alteração para atualizações parciais incluirá um delta descrevendo as alterações no documento.

    Quando definido como 'updateLookup', a notificação de alteração para atualizações parciais incluirá um delta descrevendo as alterações no documento, bem como uma cópia de todo o documento que foi alterado algum tempo após a ocorrência da alteração.

    Quando definido como 'whenAvailable', configura o fluxo de alterações para retornar a pós-imagem do documento modificado para eventos de alteração de substituição e atualização se a pós-imagem desse evento estiver disponível.

    Quando definido como "obrigatório", tem o mesmo comportamento de "whenAvailable", exceto pelo fato de que um erro é gerado se a pós-imagem não estiver disponível.

  • :full_document_before_change (string)

    Valores permitidos: nil, 'whenAvailable', 'required', 'off'.

    O padrão é não enviar um valor (ou seja, nil), que é equivalente a "off".

    Quando definido como "whenAvailable", configura o change stream para retornar a pré-imagem do documento modificado para substituir, atualizar e excluir eventos de alteração, se estiver disponível.

    Quando definido como "obrigatório", tem o mesmo comportamento de "whenAvailable", exceto pelo fato de que um erro é gerado se a pré-imagem não estiver disponível.

  • :resume_after (BSON::Document, Hash)

    Especifica o ponto de partida lógico para o novo fluxo de alteração.

  • :max_await_time_ms (Inteiro)

    O tempo máximo para o servidor aguardar novos documentos para atender a uma query de fluxo de alterações.

  • :batch_size (Inteiro)

    O número de documentos a serem devolvidos por lote.

  • :collation (BSON::Document, Hash)

    O agrupamento a ser usado.

  • :start_at_operation_time (BSON::Timestamp)

    Retornar apenas alterações que ocorreram no momento ou após o registro de data/hora especificado. Qualquer comando executado no servidor retornará um tempo de cluster que pode ser usado aqui. Reconhecido apenas pelas versões do servidor 4.0+.

  • :start_after (Bson::Document, Hash)

    Semelhante a :resume_after, esta opção pega um token de retomada e inicia um novo fluxo de alterações, retornando a primeira notificação após o token. Isso permitirá que os usuários assistam a coleções que foram descartadas e recriadas ou coleções recém-renomeadas sem perder nenhuma notificação.

  • :comentário (Objeto)

    Um comentário fornecido pelo usuário para anexar a este comando.

  • :show_expanded_events (Booleano)

    Permite que o servidor envie a lista "expandida" de eventos de fluxo de alterações. A lista de eventos adicionais incluídos com este conjunto de sinalizadores é: createIndexes, dropIndexes, modify, create, shardCollection, reshardCollection, refineCollectionShardKey.

    O servidor relatará um erro se 'startAfter' e `resumeAfter' forem especificados.

Desde:

  • 2.5.0



127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# File 'build/ruby-driver-v2.19/lib/mongo/collection/view/change_stream.rb', linha 127

def inicializar(vista, gasoduto, change_for, opções = {})
  @view = vista
  @changes_for = change_for
  @change_stream_filters = gasoduto && gasoduto.dup
  @opções = opções && opções.dup.congelar
  @start_after = @opções[:start_after]

  # O token de retomada rastreado pelo fluxo de alterações, usado apenas
  # quando não houver cursor ou nenhum token de retomada do cursor
  @resume_token = @start_after || @opções[:resume_after]

  create_cursor!

  # Enviamos parâmetros diferentes quando retomamos um change stream
  # em comparação com quando enviamos a primeira query
  @resuming = true
end

Detalhes do atributo da instância

#opçõesBSON::Document (somente leitura)

Retorna as opções de change stream.

Retorna:

  • (BSON::Document)

    As opções de change stream.

Desde:

  • 2.5.0



61
62
63
# File 'build/ruby-driver-v2.19/lib/mongo/collection/view/change_stream.rb', linha 61

def opções
  @opções
end

Detalhes do método de instância

#closenil

Observação:

Este método tenta fechar o cursor usado pelo change stream, que, por sua vez, fecha o cursor do change stream no lado do servidor. Esse método ignora todos os erros que ocorrem ao fechar o cursor do lado do servidor.

Feche o fluxo de alterações.

Exemplos:

Feche o fluxo de alterações.

stream.close

Retorna:

  • (nil)

    Sempre nulo.

Desde:

  • 2.5.0



237
238
239
240
241
242
243
244
245
246
# File 'build/ruby-driver-v2.19/lib/mongo/collection/view/change_stream.rb', linha 237

def Fechar
  a menos que fechado?
    começar
      @cursor.Fechar
    salvar Erro::Falha de operação, Erro::Erro de soquete, Erro::SocketTimeoutError, Erro::missingconnection
      #ignorar
    end
    @cursor = nada
  end
end

#fechado?true, false

O change stream está fechado?

Exemplos:

Determine se o fluxo de alterações está fechado.

stream.closed?

Retorna:

  • (verdadeiro, falso)

    Se o fluxo de alterações estiver fechado.

Desde:

  • 2.5.0



256
257
258
# File 'build/ruby-driver-v2.19/lib/mongo/collection/view/change_stream.rb', linha 256

def fechado?
  @cursor.nada?
end

#cada {|Cada| ... } ➤ Enumerador

Iterar por meio de documentos retornados pelo fluxo de alterações.

Esse método tenta novamente uma vez por erro em erros retomáveis (dois erros consecutivos resultam no segundo erro sendo gerado, um erro que é recuperado de redefine a contagem de erros para zero).

Exemplos:

Iterar através do fluxo de documentos.

stream.each do |document|
  p document
end

Parâmetros de rendimento:

  • Cada (BSON::Document)

    documento de fluxo de alterações.

Retorna:

  • (Enumerador)

    O enumerador.

Desde:

  • 2.5.0



161
162
163
164
165
166
167
168
169
# File 'build/ruby-driver-v2.19/lib/mongo/collection/view/change_stream.rb', linha 161

def cada
  aumentar StopIteration.Novo se fechado?
  loop fazer
    documento = try_next
    rendimento documento se documento
  end
salvar StopIteration
  Método auto
end

#inspecionarstring

Obtenha uma string formatada para uso na inspeção.

Exemplos:

Inspecione o objeto change stream .

stream.inspect

Retorna:

  • (string)

    A inspeção do fluxo de alterações.

Desde:

  • 2.5.0



268
269
270
271
# File 'build/ruby-driver-v2.19/lib/mongo/collection/view/change_stream.rb', linha 268

def inspecionar
  "#<Mongo::Collection::View:ChangeStream:0x#{object_id} filter=#{@change_stream_filters} " +
    "options=#{@options} resume_token=#{resume_token}>"
end

#resume_token ➤ BSON::Document | nada

Retorna o token de retomada que o stream usará para ser retomado automaticamente, se houver.

Exemplos:

Obtenha o token de retomada do fluxo de alterações.

stream.resume_token

Retorna:

  • (BSON::Document | nil)

    O token de retomada do fluxo de alterações.

Desde:

  • 2.10.0



282
283
284
285
# File 'build/ruby-driver-v2.19/lib/mongo/collection/view/change_stream.rb', linha 282

def resume_token
  cursor_resume_token = @cursor.resume_token se @cursor
  cursor_resume_token || @resume_token
end

#to_enum ➤ Objeto

Desde:

  • 2.5.0



213
214
215
216
217
218
219
220
221
222
# File 'build/ruby-driver-v2.19/lib/mongo/collection/view/change_stream.rb', linha 213

def to_enum
  enum = super
  enum.enviar(:instance_variable_set, '@obj', auto)
  classe << enum
    def try_next
      @obj.try_next
    end
  end
  enum
end

#try_next ➤ BSON::Document | nada

Retorne um documento do fluxo de alterações, se houver um disponível.

Tenta novamente uma vez em um erro retomável.

Gera StopIteration se o change stream estiver fechado.

Este método aguardará até max_await_time_ms milissegundos por alterações do servidor e, se nenhuma alteração for recebida, retornará nulo.

Retorna:

  • (BSON::Document | nil)

    Um documento do change stream.

Aumenta:

  • (StopIteration)

Desde:

  • 2.6.0



183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
# File 'build/ruby-driver-v2.19/lib/mongo/collection/view/change_stream.rb', linha 183

def try_next
  aumentar StopIteration.Novo se fechado?
  começar
    doc = @cursor.try_next
  salvar mongo::Erro => e
    se !e.change_stream_resumable?
      aumentar
    end

    # Executar novamente a agregação inicial .
    # Qualquer erro aqui interromperá a iteração e sairá disso
    #método.

    # Salvar o token de retomada do cursor para que possamos usá-lo
    # para criar um novo cursor
    @resume_token = @cursor.resume_token

    Fechar
    create_cursor!
    tentar novamente
  end

  # Precisamos verificar se cada documento tem um _id, então podemos
  # tenha um token de currículo para trabalhar
  se doc && doc['_id'].nada?
    aumentar Erro::missingResumeToken
  end
  doc
end