Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Menu Docs
Página inicial do Docs
/ /

db.collection.insert() (método mongosh)

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.

db.collection.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 que expressa a preocupação de gravação . Omita o uso do preocupação de gravação padrão. Consulte Write Concern.

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 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 no parâmetro de opções.

Se a coleção não existir, então insert() cria a coleção.

Se o documento a ser inserido não especificar um campo _id, então mongod adicionará o campo _id e atribuirá um ObjectId() exclusivo para o documento. A maioria dos drivers cria um ObjectId e insere o campo _id, mas o mongod criará e preencherá o _id se o driver ou aplicativo não.

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

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.

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 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, insert() criará a coleção.

No exemplo a seguir, o documento passado para 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 insert() inclui o campo _id. O valor de _id deve ser único 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 uma array de documentos para 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 na 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, j: true, wtimeout: 5000 } }
)

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

Em caso de sucesso, o objeto WriteResult retornado contém informações sobre o número de documentos inseridos:

WriteResult({ "nInserted" : 1 })

Se 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 insert() encontrar um erro que não seja de 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 uma array de documentos, insert() retorna um objeto BulkWriteResult().

Voltar

db.collection.hideIndex

Nesta página