Menu Docs
Página inicial do Docs
/ / /
Driver Ruby MongoDB
/

Gravações em massa

Nesta página

  • insert_one
  • update_one
  • update_many
  • replace_one
  • delete_one
  • delete_many
  • Divisão de gravação em massa

A API de gravação em massa envia várias operações de gravação para o servidor em um único comando. Use a API de gravação em massa para reduzir o número de viagens de ida e volta da rede ao realizar várias gravações por vez. Por exemplo, para realizar várias atualizações com eficiência, pode-se fazer:

collection = client['colors']
collection.bulk_write([
{
update_one: {
filter: {name: 'yellow'},
update: {'$set' => {hex: 'ffff00'}},
},
},
{
update_one: {
filter: {name: 'purple'},
update: {'$set' => {hex: '800080'}},
},
},
], ordered: true, write_concern: {w: :majority})

O exemplo a seguir mostra como executar diferentes tipos de operações na mesma solicitação:

collection.bulk_write([
{ insert_one: { x: 1 } },
{ update_one: {
filter: { x: 1 },
update: {'$set' => { x: 2 } },
} },
{ replace_one: {
filter: { x: 2 },
replacement: { x: 3 },
} },
], :ordered => true)

O primeiro argumento para bulk_write é a lista de operações a serem executadas. Cada operação deve ser especificada como um hash com exatamente uma chave que é o nome da operação e a especificação da operação como o valor correspondente. As operações suportadas são detalhadas abaixo. O método bulk_write também aceita as seguintes opções:

Opção
Descrição
bypass_document_validation
true ou false. Se deve ignorar a validação do documento.
ordered
Se a opção ordered estiver definida como true (que é o padrão), as operações serão aplicadas em ordem e, se qualquer operação falhar, as operações subsequentes não serão tentadas. Se a opção ordered estiver definida para false, todas as operações especificadas serão tentadas.
write_concern
A referência de escrita para a operação, especificada como um hash.

As operações válidas de escrita em massa são as seguintes:

{ insert_one: { x: 1 } }

Observação

Não há nenhuma operação em massa insert_many . Para inserir vários documentos, especifique várias operações insert_one .

{ update_one: {
filter: { x: 1 },
update: { '$set' => { x: 2 } },
# upsert is optional and defaults to false
upsert: true,
} }
{ update_many: {
filter: { x: 1 },
update: { '$set' => { x: 2 } },
# upsert is optional and defaults to false
:upsert => true,
} }
{ replace_one: {
filter: { x: 1 },
replacement: { x: 2 },
# upsert is optional and defaults to false
upsert: true,
} }

Observação

A operação :replace_one exige que o valor de substituição seja um documento. :replace_one não reconhece os operadores de atualização do MongoDB no valor de substituição. Em uma versão futura, espera-se que o driver proíba o uso de chaves que começam com $ no documento de substituição.

{ delete_one: {
filter: { x: 1 },
} }
{ delete_many: {
filter: { x: 1 },
} }

O driver permite que o aplicativo envie solicitações de gravação em massa arbitrariamente grandes. No entanto, como o MongoDB Server limita o tamanho dos documento de comando (atualmente esse limite é de 48 MiB), as gravações em massa que excederem esse limite serão sujeitas a divisão em várias solicitações.

Quandoa criptografia do lado do cliente é usada, o limite usado para a divisão de gravação em massa é reduzido para permitir a sobrecarga no texto cifrado.

Voltar

Operações CRUD