Módulo: Mongo::Collection::View::Writable

Incluído em:
Mongo::collection::Visualizar
Definido em:
lib/mongo/collection/view/writable.rb

Visão geral

Define o comportamento relacionado à gravação para visualização de collection.

Desde:

  • 2.0.0

Colapsode resumo constante

Array_filters =

A matriz filtra a constante do campo.

Desde:

  • 2.5.0

'array_filters'.congelar

Recolhimento do Resumo do método de instância

Detalhes do método de instância

#delete_many(opts = {}) ⇒ Resultado

Remover documentos da coleção.

Exemplos:

Remover vários documentos da coleção.

collection_view.delete_many

Parâmetros:

  • opciona (Hash) (padrão para: {})

    As opções.

  • opções (Hash)

    um conjunto personalizável de opções

Hash de opções (opts):

  • :collation (Hash)

    O agrupamento a ser usado.

  • :session (Sessão)

    A sessão a ser usada.

  • :hint (Hash | string)

    O índice a ser usado para essa operação. Pode ser especificado como um Hash (por exemplo { _id: 1 }) ou uma string (por exemplo "ID ").

  • :write_concern (Hash)

    As opções de preocupação de gravação . Pode ser :w => Inteiro, : fsync => Booleano, :j => Booleano.

  • :let (Hash)

    Mapeamento de variáveis a serem usadas no comando. Consulte a documentação do servidor para obter detalhes.

  • :comentário (Objeto)

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

Retorna:

  • (Resultado)

    A resposta do banco de banco de dados.

Desde:

  • 2.0.0

[Ver fonte]

257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
# File 'lib/mongo/collection/view/writable.rb', linha 257

def delete_many(opciona = {})
  with_session(opciona) fazer |session|
    write_concern = se opciona[:write_concern]
      Escreva preocupação.obter(opciona[:write_concern])
    mais
      write_concern_with_session(session)
    end

    Cache de consulta.clear_namespace(collection.namespace)

    delete_doc = {
      (operação)::q => filtro, filtro,
      (operação)::LIMIT => 0,
      hint: opciona[:hint],
      agrupamento: opciona[:collation] || opciona['agrupamento'] || agrupamento,
    }.compactar
    Contexto = (operação)::Contexto.Novo(
      cliente: Cliente,
      sessão: session,
      operation_timeouts: operation_timeouts(opciona)
    )
    nro_write_with_retry(write_concern, contexto: Contexto) fazer |Conexão, txn_num, Contexto|
      gte_4_4 = Conexão.Servidor.Descrição.server_version_gte?('4.4')
      se !gte_4_4 && opciona[:hint] && write_concern && !write_concern.reconhecido?
        aumentar Erro::UnsupportedOption.hint_error(unknowledged_write: true)
      end

      (operação)::Excluir.Novo(
        exclui: [ delete_doc ],
        db_name: collection.database.name,
        coll_name: collection.name,
        write_concern: write_concern,
        bypass_document_validation: !!opciona[:bypass_document_validation],
        sessão: session,
        let: opciona[:let],
        comment: opciona[:comentário],
      ).execute_with_connection(Conexão, contexto: Contexto)
    end
  end
end

#delete_one(opts = {}) ⇒ Resultado

Remover um documento da coleção.

Exemplos:

Remova um único documento da coleção.

collection_view.delete_one

Parâmetros:

  • opciona (Hash) (padrão para: {})

    As opções.

  • opções (Hash)

    um conjunto personalizável de opções

Hash de opções (opts):

  • :collation (Hash)

    O agrupamento a ser usado.

  • :comentário (Objeto)

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

  • :hint (Hash | string)

    O índice a ser usado para essa operação. Pode ser especificado como um Hash (por exemplo { _id: 1 }) ou uma string (por exemplo "ID ").

  • :let (Hash)

    Mapeamento de variáveis a serem usadas no comando. Consulte a documentação do servidor para obter detalhes.

  • :session (Sessão)

    A sessão a ser usada.

  • :write_concern (Hash)

    As opções de preocupação de gravação . Pode ser :w => Inteiro, : fsync => Booleano, :j => Booleano.

Retorna:

  • (Resultado)

    A resposta do banco de banco de dados.

Desde:

  • 2.0.0

[Ver fonte]

323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
# File 'lib/mongo/collection/view/writable.rb', linha 323

def delete_one(opciona = {})
  with_session(opciona) fazer |session|
    write_concern = se opciona[:write_concern]
      Escreva preocupação.obter(opciona[:write_concern])
    mais
      write_concern_with_session(session)
    end

    Cache de consulta.clear_namespace(collection.namespace)

    delete_doc = {
      (operação)::q => filtro, filtro,
      (operação)::LIMIT => 1,
      hint: opciona[:hint],
      agrupamento: opciona[:collation] || opciona['agrupamento'] || agrupamento,
    }.compactar

    Contexto = (operação)::Contexto.Novo(
      cliente: Cliente,
      sessão: session,
      operation_timeouts: operation_timeouts(opciona)
    )
    write_with_retry(write_concern, contexto: Contexto) fazer |Conexão, txn_num, Contexto|
      gte_4_4 = Conexão.Servidor.Descrição.server_version_gte?('4.4')
      se !gte_4_4 && opciona[:hint] && write_concern && !write_concern.reconhecido?
        aumentar Erro::UnsupportedOption.hint_error(unknowledged_write: true)
      end

      (operação)::Excluir.Novo(
        exclui: [ delete_doc ],
        db_name: collection.database.name,
        coll_name: collection.name,
        write_concern: write_concern,
        bypass_document_validation: !!opciona[:bypass_document_validation],
        sessão: session,
        txn_num: txn_num,
        let: opciona[:let],
        comment: opciona[:comentário],
      ).execute_with_connection(Conexão, contexto: Contexto)
    end
  end
end

#find_one_and_delete(opts = {}) ➤ BSON::Document?

Localiza um único documento no banco de dados via findAndModify e o exclui, devolvendo o documento original.

Exemplos:

Encontre um documento e exclua-o.

view.find_one_and_delete

Parâmetros:

  • opciona (Hash) (padrão para: {})

    As opções.

  • opções (Hash)

    um conjunto personalizável de opções

Hash de opções (opts):

  • :max_time_ms (Inteiro)

    A quantidade máxima de tempo para permitir que o comando seja executado em milissegundos. Esta opção está obsoleta, use :timeout_ms em vez disso.

  • :projection (Hash)

    Os campos a serem incluídos ou excluídos no documento retornado.

  • :sort (Hash)

    Os pares de chave e direção pelos quais o conjunto de resultados será classificado.

  • :collation (Hash)

    O agrupamento a ser usado.

  • :session (Sessão)

    A sessão a ser usada.

  • :hint (Hash | string)

    O índice a ser usado para essa operação. Pode ser especificado como um Hash (por exemplo { _id: 1 }) ou uma string (por exemplo "ID ").

  • :write_concern (Hash)

    As opções de preocupação de gravação . Pode ser :w => Inteiro, : fsync => Booleano, :j => Booleano.

  • :let (Hash)

    Mapeamento de variáveis a serem usadas no comando. Consulte a documentação do servidor para obter detalhes.

  • :comentário (Objeto)

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

Retorna:

  • (BSON::Document, nil)

    O documento, se encontrado.

Desde:

  • 2.0.0

[Ver fonte]

64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/mongo/collection/view/writable.rb', linha 64

def find_one_and_delete(opciona = {})
  with_session(opciona) fazer |session|
    write_concern = se opciona[:write_concern]
      Escreva preocupação.obter(opciona[:write_concern])
    mais
      write_concern_with_session(session)
    end

    Cache de consulta.clear_namespace(collection.namespace)

    cmd = {
      encontrar e modificar: collection.name,
      query: filtro, filtro,
      remover: true,
      campos: projeção,
      sort: sort,
      maxTimeMS: max_time_ms,
      bypassDocumentValidation: opciona[:bypass_document_validation],
      hint: opciona[:hint],
      agrupamento: opciona[:collation] || opciona['agrupamento'] || agrupamento,
      let: opciona[:let],
      comment: opciona[:comentário],
    }.compactar

    Contexto = (operação)::Contexto.Novo(
      cliente: Cliente,
      sessão: session,
      operation_timeouts: operation_timeouts(opciona)
    )
    write_with_retry(write_concern, contexto: Contexto) fazer |Conexão, txn_num, Contexto|
      gte_4_4 = Conexão.Servidor.Descrição.server_version_gte?('4.4')
      se !gte_4_4 && opciona[:hint] && write_concern && !write_concern.reconhecido?
        aumentar Erro::UnsupportedOption.hint_error(unknowledged_write: true)
      end

      (operação)::Comando de gravação.Novo(
        seletor: cmd,
        db_name: database.name,
        write_concern: write_concern,
        sessão: session,
        txn_num: txn_num,
      ).execute_with_connection(Conexão, contexto: Contexto)
    end
  end.primeiro&.buscar('value', nada)
end

#find_one_and_replace(replacement, opts = {}) ➤ BSON::Document

Localiza um único documento e o substitui.

Exemplos:

Encontre um documento e substitua-o, devolvendo o original.

view.find_one_and_replace({ name: 'test' }, :return_document => :before)

Encontre um documento e substitua-o, retornando o novo documento.

view.find_one_and_replace({ name: 'test' }, :return_document => :after)

Parâmetros:

  • substituição (BSON::Document)

    A substituição.

  • opciona (Hash) (padrão para: {})

    As opções.

  • opções (Hash)

    um conjunto personalizável de opções

Hash de opções (opts):

  • :return_document (Símbolo)

    :before ou :after.

  • :upsert (verdadeiro, falso)

    Se deve ser atualizado se o documento não existe.

  • :bypass_document_validation (verdadeiro, falso)

    Se deve ou não ignorar a validação em nível de documento .

  • :collation (Hash)

    O agrupamento a ser usado.

  • :hint (Hash | string)

    O índice a ser usado para essa operação. Pode ser especificado como um Hash (por exemplo { _id: 1 }) ou uma string (por exemplo "ID ").

  • :write_concern (Hash)

    As opções de preocupação de gravação . Pode ser :w => Inteiro, : fsync => Booleano, :j => Booleano.

  • :let (Hash)

    Mapeamento de variáveis a serem usadas no comando. Consulte a documentação do servidor para obter detalhes.

Retorna:

  • (BSON::Document)

    O documento.

Desde:

  • 2.0.0

[Ver fonte]

140
141
142
# File 'lib/mongo/collection/view/writable.rb', linha 140

def find_one_and_replace(substituição, opciona = {})
  find_one_and_update(substituição, opciona)
end

#find_one_and_update(document, opts = {}) ⇒ BSON::Document | nil

Localiza um único documento e o atualiza.

uma atualização deve ser aplicada.

Exemplos:

Encontre um documento e atualize-o, devolvendo o original.

view.find_one_and_update({ "$set" => { name: 'test' }}, :return_document => :before)

Parâmetros:

  • documento (BSON::Document)

    As atualizações.

  • opciona (Hash) (padrão para: {})

    As opções.

  • opções (Hash)

    um conjunto personalizável de opções

Hash de opções (opts):

  • :max_time_ms (Inteiro)

    A quantidade máxima de tempo para permitir que o comando seja executado em milissegundos. Esta opção está obsoleta, use :timeout_ms em vez disso.

  • :projection (Hash)

    Os campos a serem incluídos ou excluídos no documento retornado.

  • :sort (Hash)

    Os pares de chave e direção pelos quais o conjunto de resultados será classificado.

  • :return_document (Símbolo)

    :before ou :after.

  • :upsert (verdadeiro, falso)

    Se deve ser atualizado se o documento não existe.

  • :bypass_document_validation (verdadeiro, falso)

    Se deve ou não ignorar a validação em nível de documento .

  • :collation (Hash)

    O agrupamento a ser usado.

  • :array_filters (Array)

    Um conjunto de filtros especificando para quais elementos da array

  • :session (Sessão)

    A sessão a ser usada.

  • :hint (Hash | string)

    O índice a ser usado para essa operação. Pode ser especificado como um Hash (por exemplo { _id: 1 }) ou uma string (por exemplo "ID ").

  • :write_concern (Hash)

    As opções de preocupação de gravação . Pode ser :w => Inteiro, : fsync => Booleano, :j => Booleano.

  • :let (Hash)

    Mapeamento de variáveis a serem usadas no comando. Consulte a documentação do servidor para obter detalhes.

  • :comentário (Objeto)

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

Retorna:

  • (BSON::Document | nil)

    O documento ou nulo se nenhum for encontrado.

Desde:

  • 2.0.0

[Ver fonte]

182
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
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
# File 'lib/mongo/collection/view/writable.rb', linha 182

def find_one_and_update(documento, opciona = {})
  valor = with_session(opciona) fazer |session|
    write_concern = se opciona[:write_concern]
      Escreva preocupação.obter(opciona[:write_concern])
    mais
      write_concern_with_session(session)
    end

    Cache de consulta.clear_namespace(collection.namespace)

    cmd = {
      encontrar e modificar: collection.name,
      query: filtro, filtro,
      arrayFilters: opciona[:array_filters] || opciona['array_filters'],
      update: documento,
      campos: projeção,
      sort: sort,
      novo: !!(opciona[:return_document] && opciona[:return_document] == :after),
      upsert: opciona[:upsert],
      maxTimeMS: max_time_ms,
      bypassDocumentValidation: opciona[:bypass_document_validation],
      hint: opciona[:hint],
      agrupamento: opciona[:collation] || opciona['agrupamento'] || agrupamento,
      let: opciona[:let],
      comment: opciona[:comentário]
    }.compactar

    Contexto = (operação)::Contexto.Novo(
      cliente: Cliente,
      sessão: session,
      operation_timeouts: operation_timeouts(opciona)
    )
    write_with_retry(write_concern, contexto: Contexto) fazer |Conexão, txn_num, Contexto|
      gte_4_4 = Conexão.Servidor.Descrição.server_version_gte?('4.4')
      se !gte_4_4 && opciona[:hint] && write_concern && !write_concern.reconhecido?
        aumentar Erro::UnsupportedOption.hint_error(unknowledged_write: true)
      end

      (operação)::Comando de gravação.Novo(
        seletor: cmd,
        db_name: database.name,
        write_concern: write_concern,
        sessão: session,
        txn_num: txn_num,
      ).execute_with_connection(Conexão, contexto: Contexto)
    end
  end.primeiro&.buscar('value', nada)
  valor a menos que valor.nada? || valor.vazio?
end

#replace_one(substituição, opts = {}) ➤ Resultado

Substitui um único documento no banco de dados de dados pelo novo documento.

Exemplos:

Substitui um único documento.

collection_view.replace_one({ name: 'test' })

Parâmetros:

  • substituição (Hash)

    O documento de substituição.

  • opciona (Hash) (padrão para: {})

    As opções.

  • opções (Hash)

    um conjunto personalizável de opções

Hash de opções (opts):

  • :bypass_document_validation (verdadeiro, falso)

    Se deve ou não ignorar a validação em nível de documento .

  • :collation (Hash)

    O agrupamento a ser usado.

  • :comentário (Objeto)

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

  • :hint (Hash | string)

    O índice a ser usado para essa operação. Pode ser especificado como um Hash (por exemplo { _id: 1 }) ou uma string (por exemplo "ID ").

  • :let (Hash)

    Mapeamento de variáveis a serem usadas no comando. Consulte a documentação do servidor para obter detalhes.

  • :session (Sessão)

    A sessão a ser usada.

  • :write_concern (Hash)

    As opções de preocupação de gravação .

  • :upsert (verdadeiro, falso)

    Se deve ser atualizado se o documento não existe. Pode ser :w => Inteiro, : fsync => Booleano, :j => Booleano.

Retorna:

  • (Resultado)

    A resposta do banco de banco de dados.

Desde:

  • 2.0.0

[Ver fonte]

396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
# File 'lib/mongo/collection/view/writable.rb', linha 396

def replace_one(substituição, opciona = {})
  with_session(opciona) fazer |session|
    write_concern = se opciona[:write_concern]
      Escreva preocupação.obter(opciona[:write_concern])
    mais
      write_concern_with_session(session)
    end
    validate_replacement_documents!(substituição)

    Cache de consulta.clear_namespace(collection.namespace)

    update_doc = {
      (operação)::q => filtro, filtro,
      arrayFilters: opciona[:array_filters] || opciona['array_filters'],
      (operação)::u => substituição,
      hint: opciona[:hint],
      agrupamento: opciona[:collation] || opciona['agrupamento'] || agrupamento,
    }.compactar
    se opciona[:upsert]
      update_doc['upsert'] = true
    end

    Contexto = (operação)::Contexto.Novo(
      cliente: Cliente,
      sessão: session,
      operation_timeouts: operation_timeouts(opciona)
    )
    write_with_retry(write_concern, contexto: Contexto) fazer |Conexão, txn_num, Contexto|
      gte_4_2 = Conexão.Servidor.Descrição.server_version_gte?('4.2')
      se !gte_4_2 && opciona[:hint] && write_concern && !write_concern.reconhecido?
        aumentar Erro::UnsupportedOption.hint_error(unknowledged_write: true)
      end

      (operação)::Update.Novo(
        updates: [ update_doc ],
        db_name: collection.database.name,
        coll_name: collection.name,
        write_concern: write_concern,
        bypass_document_validation: !!opciona[:bypass_document_validation],
        sessão: session,
        txn_num: txn_num,
        let: opciona[:let],
        comment: opciona[:comentário],
      ).execute_with_connection(Conexão, contexto: Contexto)
    end
  end
end

#update_many(spec, opts = {}) ➤ Resultado

Atualizar documentos na coleção.

Exemplos:

Atualizar vários documentos na coleção.

collection_view.update_many('$set' => { name: 'test' })

Parâmetros:

  • especificações (Hash | Array<Hash>)

    O documento ou pipeline de atualização.

  • opciona (Hash) (padrão para: {})

    As opções.

  • opções (Hash)

    um conjunto personalizável de opções

Hash de opções (opts):

  • :array_filters (Array)

    Um conjunto de filtros que especificam a quais elementos da array uma atualização deve ser aplicada.

  • :bypass_document_validation (verdadeiro, falso)

    Se deve ou não ignorar a validação em nível de documento .

  • :collation (Hash)

    O agrupamento a ser usado.

  • :comentário (Objeto)

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

  • :hint (Hash | string)

    O índice a ser usado para essa operação. Pode ser especificado como um Hash (por exemplo { _id: 1 }) ou uma string (por exemplo "ID ").

  • :let (Hash)

    Mapeamento de variáveis a serem usadas no comando. Consulte a documentação do servidor para obter detalhes.

  • :session (Sessão)

    A sessão a ser usada.

  • :upsert (verdadeiro, falso)

    Se deve ser atualizado se o documento não existe.

  • :write_concern (Hash)

    As opções de preocupação de gravação . Pode ser :w => Inteiro, : fsync => Booleano, :j => Booleano.

Retorna:

  • (Resultado)

    A resposta do banco de banco de dados.

Desde:

  • 2.0.0

[Ver fonte]

476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
# File 'lib/mongo/collection/view/writable.rb', linha 476

def update_many(especificações, opciona = {})
  with_session(opciona) fazer |session|
    write_concern = se opciona[:write_concern]
      Escreva preocupação.obter(opciona[:write_concern])
    mais
      write_concern_with_session(session)
    end
    validate_update_documents!(especificações)

    Cache de consulta.clear_namespace(collection.namespace)

    update_doc = {
      (operação)::q => filtro, filtro,
      arrayFilters: opciona[:array_filters] || opciona['array_filters'],
      (operação)::u => especificações,
      (operação)::Multi => true,
      hint: opciona[:hint],
      agrupamento: opciona[:collation] || opciona['agrupamento'] || agrupamento,
    }.compactar
    se opciona[:upsert]
      update_doc['upsert'] = true
    end

    Contexto = (operação)::Contexto.Novo(
      cliente: Cliente,
      sessão: session,
      operation_timeouts: operation_timeouts(opciona)
    )
    nro_write_with_retry(write_concern, contexto: Contexto) fazer |Conexão, txn_num, Contexto|
      gte_4_2 = Conexão.Servidor.Descrição.server_version_gte?('4.2')
      se !gte_4_2 && opciona[:hint] && write_concern && !write_concern.reconhecido?
        aumentar Erro::UnsupportedOption.hint_error(unknowledged_write: true)
      end

      (operação)::Update.Novo(
        updates: [ update_doc ],
        db_name: collection.database.name,
        coll_name: collection.name,
        write_concern: write_concern,
        bypass_document_validation: !!opciona[:bypass_document_validation],
        sessão: session,
        let: opciona[:let],
        comment: opciona[:comentário],
      ).execute_with_connection(Conexão, contexto: Contexto)
    end
  end
end

#update_one(spec, opts = {}) ⇒ Result

Atualizar um único documento na coleção.

Exemplos:

Atualizar um único documento na coleção.

collection_view.update_one('$set' => { name: 'test' })

Parâmetros:

  • especificações (Hash | Array<Hash>)

    O documento ou pipeline de atualização.

  • opciona (Hash) (padrão para: {})

    As opções.

  • opções (Hash)

    um conjunto personalizável de opções

Hash de opções (opts):

  • :array_filters (Array)

    Um conjunto de filtros que especificam a quais elementos da array uma atualização deve ser aplicada.

  • :bypass_document_validation (verdadeiro, falso)

    Se deve ou não ignorar a validação em nível de documento .

  • :collation (Hash)

    O agrupamento a ser usado.

  • :comentário (Objeto)

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

  • :hint (Hash | string)

    O índice a ser usado para essa operação. Pode ser especificado como um Hash (por exemplo { _id: 1 }) ou uma string (por exemplo "ID ").

  • :let (Hash)

    Mapeamento de variáveis a serem usadas no comando. Consulte a documentação do servidor para obter detalhes.

  • :session (Sessão)

    A sessão a ser usada.

  • :upsert (verdadeiro, falso)

    Se deve ser atualizado se o documento não existe.

  • :write_concern (Hash)

    As opções de preocupação de gravação . Pode ser :w => Inteiro, : fsync => Booleano, :j => Booleano.

Retorna:

  • (Resultado)

    A resposta do banco de banco de dados.

Desde:

  • 2.0.0

[Ver fonte]

556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
# File 'lib/mongo/collection/view/writable.rb', linha 556

def update_one(especificações, opciona = {})
  with_session(opciona) fazer |session|
    write_concern = se opciona[:write_concern]
      Escreva preocupação.obter(opciona[:write_concern])
    mais
      write_concern_with_session(session)
    end
    validate_update_documents!(especificações)

    Cache de consulta.clear_namespace(collection.namespace)

    update_doc = {
      (operação)::q => filtro, filtro,
      arrayFilters: opciona[:array_filters] || opciona['array_filters'],
      (operação)::u => especificações,
      hint: opciona[:hint],
      agrupamento: opciona[:collation] || opciona['agrupamento'] || agrupamento,
    }.compactar
    se opciona[:upsert]
      update_doc['upsert'] = true
    end

    Contexto = (operação)::Contexto.Novo(
      cliente: Cliente,
      sessão: session,
      operation_timeouts: operation_timeouts(opciona)
    )
    write_with_retry(write_concern, contexto: Contexto) fazer |Conexão, txn_num, Contexto|
      gte_4_2 = Conexão.Servidor.Descrição.server_version_gte?('4.2')
      se !gte_4_2 && opciona[:hint] && write_concern && !write_concern.reconhecido?
        aumentar Erro::UnsupportedOption.hint_error(unknowledged_write: true)
      end

      (operação)::Update.Novo(
        updates: [ update_doc ],
        db_name: collection.database.name,
        coll_name: collection.name,
        write_concern: write_concern,
        bypass_document_validation: !!opciona[:bypass_document_validation],
        sessão: session,
        txn_num: txn_num,
        let: opciona[:let],
        comment: opciona[:comentário],
      ).execute_with_connection(Conexão, contexto: Contexto)
    end
  end
end