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

db.collection.insert()

Nesta página

  • Definição
  • Compatibilidade
  • Sintaxe
  • Comportamentos
  • Exemplos
  • WriteResult
  • BulkWriteResult

Importante

Método de mongosh obsoleto

Esse método está obsoleto em mongosh. Para obter métodos alternativos, consulte Alterações de compatibilidade com o shell mongo legado.

db.collection.insert()

Insere um documento ou documentos em uma collection.

Retorna:
  • Um objeto WriteResult para inserções únicas.

  • Um objeto BulkWriteResult para inserções em massa.

Você pode utilizar o db.collection.Insert() para implantações hospedadas nos seguintes ambientes:

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

  • 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 método insert() tem a seguinte sintaxe:

db.collection.insert(
<document or array of documents>,
{
writeConcern: <document>,
ordered: <boolean>
}
)
Parâmetro
Tipo
Descrição
document
documento ou array
Um documento ou array de documentos para inserir na coleção.
writeConcern
documento

Opcional. Um documento expressando a preocupação de gravação. Omita o uso da preocupação de gravação padrão. Consulte Preocupação de gravaçã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.

ordered
booleano

Opcional. Se true, executar uma inserção ordenada dos documentos na array e, se ocorrer um erro com um dos documentos, o MongoDB retornará sem processar os documentos restantes na array.

Se false, execute uma inserção não ordenada e, se ocorrer um erro com um dos documentos, continue processando os documentos restantes na array.

Padrão é true.

O insert() retorna um objeto contendo o status da operação.

O método insert() usa o comando insert, que usa a preocupação de gravação padrão. Para especificar uma preocupação de gravação diferente, inclua a preocupação de gravação no parâmetro de opções.

Se a coleção não existir, o método insert() criará a coleção.

Se o documento não especificar um campo _id, o MongoDB adicionará o campo _id e atribuirá um ObjectId() exclusivo para o documento antes de inserir. A maioria dos drivers cria um ObjectId e insere o campo _id, mas o mongod criará e preencherá o _id se o driver ou o aplicativo não o fizer.

Se o documento contiver um campo _id, o valor _id deverá ser único dentro da collection para evitar erro de chave duplicada.

db.collection.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.

Se uma operação db.collection.insert() inserir um documento com sucesso, a operação adicionará uma entrada no oplog (log de operações). Se a operação falhar, ela não adicionará uma entrada no oplog.

Os exemplos a seguir inserem documentos na coleção products. Se a coleção não existir, o método insert() criará a coleção.

No exemplo a seguir, o documento passado para o método insert() não contém o campo _id:

db.products.insert( { item: "card", qty: 15 } )

Durante a inserção, mongod criará o campo _id e atribuirá a ele um valor ObjectId() exclusivo, conforme verificado pelo documento inserido:

{ "_id" : ObjectId("5063114bd386d8fadbd6b004"), "item" : "card", "qty" : 15 }

Os valores ObjectId são específicos da máquina e do momento em que a operação é executada. Dessa forma, seus valores podem ser diferentes dos do exemplo.

No exemplo a seguir, o documento passado para o método insert() contém o campo _id. O valor de _id deve ser exclusivo dentro da coleção para evitar erro de chave duplicada.

db.products.insert( { _id: 10, item: "box", qty: 20 } )

A operação insere o seguinte documento na coleção products:

{ "_id" : 10, "item" : "box", "qty" : 20 }

O exemplo a seguir executa uma inserção em massa de três documentos passando um array de documentos para o método insert(). Por padrão, o MongoDB executa uma inserção ordenada. Com inserções ordenadas, se ocorrer um erro durante a inserção de um dos documentos, o MongoDB retornará o erro sem processar os documentos restantes no array.

Os documentos na array não precisam ter os mesmos campos. Por exemplo, o primeiro documento na array tem um campo _id e um campo type. Como o segundo e o terceiro documentos não contêm um campo _id, mongod criará o campo _id para o segundo e o terceiro documentos durante a inserção:

db.products.insert(
[
{ _id: 11, item: "pencil", qty: 50, type: "no.2" },
{ item: "pen", qty: 20 },
{ item: "eraser", qty: 25 }
]
)

A operação inseriu os seguintes três documentos:

{ "_id" : 11, "item" : "pencil", "qty" : 50, "type" : "no.2" }
{ "_id" : ObjectId("51e0373c6f35bd826f47e9a0"), "item" : "pen", "qty" : 20 }
{ "_id" : ObjectId("51e0373c6f35bd826f47e9a1"), "item" : "eraser", "qty" : 25 }

O exemplo a seguir executa uma inserção não ordenada de três documentos. Com inserções não ordenadas, se ocorrer um erro durante a inserção de um dos documentos, o MongoDB continuará a inserir os documentos restantes na array.

db.products.insert(
[
{ _id: 20, item: "lamp", qty: 50, type: "desk" },
{ _id: 21, item: "lamp", qty: 20, type: "floor" },
{ _id: 22, item: "bulk", qty: 100 }
],
{ ordered: false }
)

A operação a seguir para um conjunto de réplicas especifica uma preocupação de gravação de w: 2 com uma wtimeout de 5000 milissegundos. Essa operação retorna depois que a gravação se propaga para o primário e um secundário ou expira após 5 segundos.

db.products.insert(
{ item: "envelopes", qty : 100, type: "Clasp" },
{ writeConcern: { w: 2, wtimeout: 5000 } }
)

Quando passado um único documento, insert() retorna um objeto WriteResult.

O insert() retorna um objeto WriteResult() que contém o status da operação. Após o sucesso, o objeto WriteResult() contém informações sobre o número de documentos inseridos:

WriteResult({ "nInserted" : 1 })

Se o método insert() encontrar erros de preocupação de gravação, os resultados incluirão o campo WriteResult.writeConcernError:

WriteResult({
"nInserted" : 1,
"writeConcernError"({
"code" : 64,
"errmsg" : "waiting for replication timed out",
"errInfo" : {
"wtimeout" : true,
"writeConcern" : {
"w" : "majority",
"wtimeout" : 100,
"provenance" : "getLastErrorDefaults"
}
}
})

Se o método insert() encontrar um erro que não seja preocupação de gravação, os resultados incluirão o campo WriteResult.writeError:

WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 11000,
"errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.foo.$_id_ dup key: { : 1.0 }"
}
})

Quando recebe um array de documentos, insert() retorna um objeto BulkWriteResult(). Consulte BulkWriteResult() para obter detalhes.

Voltar

db.collection.hideIndex