Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

insert

Nesta página

  • Definição
  • Compatibilidade
  • Sintaxe
  • Campos de comando
  • Comportamento
  • Exemplos
  • Saída
insert

O comando insert insere um ou mais documentos e retorna um documento contendo o status de todas as inserções. Os métodos de inserção fornecidos pelos drivers do MongoDB usam esse comando internamente.

Dica

Em mongosh, este comando também pode ser executado por meio dos métodos assistentes db.collection.insertOne() db.collection.insertMany().

Os métodos auxiliares são práticos para os usuários mongosh, mas podem não retornar o mesmo nível de informações que os comandos do banco de dados. Nos casos em que a praticidade não for necessária ou os campos de retorno adicionais forem necessários, use o comando de banco de dados.

Retorna:Um documento que contém o status da operação. Consulte Saída para detalhes.

Esse comando está disponível em implantações hospedadas nos seguintes ambientes:

  • MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem

Observação

Este comando é aceito em todos os clusters do MongoDB Atlas. Para obter informações sobre o suporte do Atlas a todos os comandos, consulte Comandos não suportados.

  • MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB

  • MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB

O comando tem a seguinte sintaxe:

db.runCommand(
{
insert: <collection>,
documents: [ <document>, <document>, <document>, ... ],
ordered: <boolean>,
maxTimeMS: <integer>,
writeConcern: { <write concern> },
bypassDocumentValidation: <boolean>,
comment: <any>
}
)

O comando utiliza os seguintes campos:

Campo
Tipo
Descrição

insert

string

O nome da coleção de destino.

documents

array

Uma matriz de um ou mais documentos para inserir na coleção designada.

ordered

booleano

Opcional. Se true, quando a inserção de um documento falhar, retorne sem inserir nenhum documento restante listado na matriz inserts. Se false, quando a inserção de um documento falhar, continue inserindo os documentos restantes. O padrão é true.

maxTimeMS

non-negative integer

Opcional.

Especifica um limite de tempo em milissegundos. Se você não especificar um valor para maxTimeMS, as operações não atingirão o tempo limite. Um valor 0 especifica explicitamente o comportamento ilimitado padrão.

O MongoDB encerra as operações que excedem o limite de tempo alocado usando o mesmo mecanismo de db.killOp(). O MongoDB só encerra uma operação em um de seus pontos de interrupção designados.

writeConcern

documento

Opcional. Um documento que expressa a preocupação de gravação do comando. Omita insert o uso do preocupação de gravação padrão.

Não defina explicitamente a preocupação de gravação para a operação se for executada em uma transação. Para usar write concern com transações, consulte Transações e write concern.

bypassDocumentValidation

booleano

Opcional. Habilita o insert para ignorar a validação do documento durante a operação. Isso permite inserir documentos que não atendam aos requisitos de validação.

comment

any

Opcional. Um comentário fornecido pelo usuário para anexar a este comando. Depois de definido, esse comentário aparece junto com os registros desse comando nos seguintes locais:

Um comentário pode ser qualquer tipo BSON válido (string, inteiro, objeto, array etc).

O tamanho total de todos os documents elementos da matriz deve ser menor ou igual ao tamanho máximo do documento BSON.

O número total de documentos na array documents deve ser menor ou igual ao tamanho máximo do volume.

O comando insert traz suporte para a opção bypassDocumentValidation, que permite ignorar a validação do documento ao inserir ou atualizar documentos em uma coleção com regras de validação.

insert pode ser usado dentro de transações distribuídas.

Importante

Na maioria dos casos, uma transação distribuída incorre em um custo de desempenho maior do que as gravações de um único documento, e a disponibilidade de transações distribuídas não deve substituir o design eficaz do esquema. Em muitos cenários, o modelo de dados desnormalizado (documentos e arrays incorporados) continuará a ser ideal para seus dados e casos de uso. Ou seja, para muitos cenários, modelar seus dados adequadamente minimizará a necessidade de transações distribuídas.

Para considerações adicionais sobre o uso de transações (como limite de tempo de execução e limite de tamanho do oplog), consulte também Considerações de produção.

Você pode criar coleção e indexes dentro de uma transaction distribuída se a transaction não for uma transação de escrita de estilhaço cruzado.

Se você especificar uma inserção em uma collection não existente em uma transação, o MongoDB criará a collection implicitamente.

Dica

Veja também:

Não defina explicitamente a preocupação de gravação para a operação se for executada em uma transação. Para usar write concern com transações, consulte Transações e write concern.

Mesmo que você encontre um erro de servidor durante uma inserção, alguns documentos podem ter sido inseridos.

Após uma inserção bem-sucedida, o sistema retorna insert.n, o número de documentos inseridos na coleção. Se a operação de inserção for interrompida por uma alteração no estado do conjunto de réplicas, o sistema poderá continuar inserindo documentos. Como resultado, insert.n pode relatar menos documentos do que os realmente inseridos.

Inserir um documento na coleção users:

db.runCommand(
{
insert: "users",
documents: [ { _id: 1, user: "abc123", status: "A" } ]
}
)

O documento que retornou mostra que o comando inseriu com sucesso um documento. Consulte Saída para detalhes.

{ "ok" : 1, "n" : 1 }

Insira três documentos na coleção users:

db.runCommand(
{
insert: "users",
documents: [
{ _id: 2, user: "ijk123", status: "A" },
{ _id: 3, user: "xyz123", status: "P" },
{ _id: 4, user: "mop123", status: "P" }
],
ordered: false,
writeConcern: { w: "majority", wtimeout: 5000 }
}
)

O documento que retornou mostra que o comando inseriu os três documentos com sucesso. Consulte Saída para detalhes.

{ "ok" : 1, "n" : 3 }

Se as ações de validação do esquema forem definidas como error, as inserções em uma coleção retornarão erros para documentos que violam as regras de validação do esquema. Para inserir documentos que violariam estas regras, defina bypassDocumentValidation: true.

Crie a coleção user com uma regra de validação nos campos status.

A regra de validação valida que o status deve ser "Desconhecido" ou "Incompleto":

db.createCollection("users", {
validator:
{
status: {
$in: [ "Unknown", "Incomplete" ]
}
}
})

Tente inserir um documento que viole a regra de validação:

db.runCommand({
insert: "users",
documents: [ {user: "123", status: "Active" } ]
})

A inserção retorna uma mensagem de erro de gravação:

{
n: 0,
writeErrors: [
{
index: 0,
code: 121,
errInfo: {
failingDocumentId: ObjectId('6197a7f2d84e85d1cc90d270'),
details: {
operatorName: '$in',
specifiedAs: { status: { '$in': [Array] } },
reason: 'no matching value found in array',
consideredValue: 'Active'
}
},
errmsg: 'Document failed validation'
}
],
ok: 1
}

Defina bypassDocumentValidation : true e execute novamente a inserção:

db.runCommand({
insert: "users",
documents: [ {user: "123", status: "Active" } ],
bypassDocumentValidation: true
})

A operação é bem-sucedida.

Para verificar se há documentos que violam regras de validação de esquema, use o comando validate.

O documento devolvido contém um subconjunto dos seguintes campos:

insert.ok

O status do comando.

insert.n

O número de documentos inseridos.

insert.writeErrors

Uma array de documentos que contém informações sobre qualquer erro encontrado durante a operação de inserção. A array writeErrors contém um documento de erro para cada inserção com erro.

Cada documento de erro contém os seguintes campos:

insert.writeErrors.index

Um número inteiro que identifica o documento na array documents, que utiliza um índice baseado em zero.

insert.writeErrors.code

Um valor inteiro identificando o erro.

insert.writeErrors.errmsg

Uma descrição do erro.

insert.writeConcernError

Documento descrevendo erros relacionados à preocupação de gravação.

Alterado na versão 7.1: Quando insert é executado em mongos, os erros de write concern são sempre relatados, mesmo quando ocorrem um ou mais erros de escrita.

Em versões anteriores, a ocorrência de erros de gravação poderia fazer com que insert não relatasse erros de preocupação de gravação .

Os documentos writeConcernError contêm os seguintes campos:

insert.writeConcernError.code

Um valor inteiro que identifica a causa do erro de write concern.

insert.writeConcernError.errmsg

Uma descrição da causa do erro de write concern.

insert.writeConcernError.errInfo.writeConcern

O objeto de write concern usado para a operação correspondente. Para obter informações sobre os campos de objeto de write concern, consulte Especificação de write concern.

O objeto de write concern também pode conter o seguinte campo, indicando a origem da write concern:

insert.writeConcernError.errInfo.writeConcern.provenance

Um valor de string que indica a origem do write concern (conhecido como write concern provenance). A tabela a seguir mostra os valores possíveis para este campo e sua significância:

Proveniência
Descrição

clientSupplied

A preocupação de gravação foi especificada no aplicativo.

customDefault

A preocupação de gravação originou-se de um valor padrão personalizado definido. Consulte setDefaultRWConcern.

getLastErrorDefaults

A preocupação de gravação originada do campo settings.getLastErrorDefaults do conjunto de réplicas.

implicitDefault

A preocupação de gravação originou-se do servidor na ausência de todas as outras especificações de preocupação de gravação.

A seguir está um documento de exemplo retornado para uma insert bem-sucedida de um único documento:

{ ok: 1, n: 1 }

A seguir, um exemplo de documento retornado para um insert de dois documentos que inseriram com êxito um documento, mas encontraram um erro com o outro documento:

{
"ok" : 1,
"n" : 1,
"writeErrors" : [
{
"index" : 1,
"code" : 11000,
"errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.users.$_id_ dup key: { : 1.0 }"
}
]
}

Voltar

pegue mais