Definição
insertInsere um ou mais documentos em uma coleção e retorna um documento de status. Os métodos de inserção do driver MongoDB usam esse comando internamente.
Dica
Em
mongosh, este comando também pode ser executado por meio dos métodos de assistentedb.collection.insertOne()edb.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.
Compatibilidade
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
Sintaxe
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> } )
Campos de comando
O comando utiliza os seguintes campos:
Campo | Tipo | Descrição |
|---|---|---|
| string | O nome da coleção de destino. |
| array | Uma matriz de um ou mais documentos para inserir na coleção designada. |
| booleano | opcional. Se |
| non-negative integer | Opcional. Especifica um limite de tempo em milissegundos. Se você não especificar um valor para O MongoDB encerra as operações que excedem o limite de tempo alocado usando o mesmo mecanismo de |
| documento | Opcional. Especifica a write concern. Omitir para usar a 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. |
| booleano | opcional. Permite que o |
| 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). |
Comportamento
Limite de tamanho
O tamanho total de todos os documents elementos do array não deve exceder o tamanho máximo do documento BSON.
O número total de documentos na array documents não deve exceder o tamanho máximo do volume.
Validação de esquema
O comando insert adiciona suporte para a opção bypassDocumentValidation, que permite ignorar a validação de esquema ao inserir ou atualizar documentos em uma coleção com regras de validação.
Transações
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.
Criação de collections em transações
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.
Write concerns e transações
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.
Inserir Imprecisões
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.
Exemplos
Inserir um único documento
Inserir um documento na coleção users:
db.runCommand( { insert: "users", documents: [ { _id: 1, user: "abc123", status: "A" } ] } )
A operação retorna o seguinte documento:
{ "ok" : 1, "n" : 1 }
Bulk Insert
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 } } )
A operação retorna o seguinte documento:
{ "ok" : 1, "n" : 3 }
Usando Inserir com bypassDocumentValidation
Se a validação do esquema validationActions for definida como error, o comando de inserção retornará um erro para documentos que falharem na validação. Para inserir documentos que violam as regras de validação, 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" ] } } })
Insira 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.
Saída
O documento devolvido contém um subconjunto dos seguintes campos:
insert.writeErrorsUma array de documentos que contém informações sobre qualquer erro encontrado durante a operação de inserção. A array
writeErrorscontém um documento de erro para cada inserção com erro.Cada documento de erro contém os seguintes campos:
insert.writeConcernErrorDocumento descrevendo erros relacionados à preocupação de gravação.
Alterado na 7.0.6 versão: (também disponível em 6.0.14 e 5.0.30): Quando é
insertmongosexecutado em , erros de preocupação de gravação 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 queinsertnão relatasse erros de preocupação de gravação .Os documentos
writeConcernErrorcontêm os seguintes campos:insert.writeConcernError.errInfo.writeConcernO 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.provenanceUm 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ênciaDescriçãoclientSuppliedA write concern foi especificada no aplicativo.
customDefaultA write concern originou-se de um valor padrão personalizado definido. Consulte
setDefaultRWConcern.getLastErrorDefaultsA write concern originada do campo
settings.getLastErrorDefaultsdo conjunto de réplicas.implicitDefaultA write concern originou-se do servidor na ausência de todas as outras especificações de write concern.
A seguir, um exemplo de resultado para uma inserção bem-sucedida de um único documento:
{ ok: 1, n: 1 }
O seguinte mostra um exemplo de saída quando um documento é inserido com sucesso e um segundo documento falha:
{ "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 }" } ] }