O MongoDB fornece muitas maneiras de inserir documentos em uma coleção.
Aqui estão 5 maneiras de inserir documentos em uma coleção ao usar o shell mongo.
O insertOne()
Método
O
insertOne()
O método insere um único documento em uma coleção. Seu nome completo é
db.collection.insertOne()
, onde collection
é o nome da coleção na qual inserir o documento. Aqui está um exemplo de inserção de um documento em uma coleção chamada
pets
:db.pets.insertOne( {
name: "Scratch",
type: "Cat"
} )
Resultado:
{ "acknowledged" : true, "insertedId" : ObjectId("5fe2d15637b49e0faf1af214") }
O
db.collection.insertOne()
O método retorna um documento contendo:- Um booleano
acknowledged
comotrue
se a operação foi executada com preocupação de gravação oufalse
se a preocupação de gravação foi desativada. - Um campo
insertedId
com o_id
valor do documento inserido.
O insertMany()
Método
O
insertMany()
método é semelhante a insertOne()
, exceto que ele insere vários documentos em uma coleção. Também de forma semelhante a
insertOne()
, seu nome completo é db.collection.insertMany()
, onde collection
é o nome da coleção na qual inserir o documento. Isso se aplica a todos os métodos listados neste artigo. Aqui está um exemplo de uso de
db.collection.insertMany()
para inserir vários documentos em uma coleção chamada pets
:db.pets.insertMany([
{ _id: 1, name: "Wag", type: "Dog" },
{ _id: 2, name: "Bark", type: "Dog" },
{ _id: 3, name: "Meow", type: "Cat" }
])
Resultado:
{ "acknowledged" : true, "insertedIds" : [ 1, 2, 3 ] }
O
db.collection.insertMany()
O método retorna um documento contendo:- Um booleano
acknowledged
comotrue
se a operação foi executada com preocupação de gravação oufalse
se a preocupação de gravação foi desativada. - Uma matriz de
_id
valores para cada documento inserido com sucesso.
O insert()
Método
O
insert()
método é como uma combinação de insertOne()
e insertMany()
. Ele permite que você insira um único documento ou vários documentos em uma coleção. Aqui está um exemplo de uso de
db.collection.insert()
para inserir um único documento:db.pets.insert(
{ name: "Bruce", type: "Bat" }
)
Resultado:
WriteResult({ "nInserted" : 1 })
Quando um único documento é inserido,
db.collection.insert()
retorna um WriteResult
objeto. Quando um array de documentos é inserido, ele retorna um BulkWriteResult
objeto. Aqui está um exemplo de uso de
db.collection.insert()
para inserir vários documentos. db.pets.insert([
{ _id: 1, name: "Wag", type: "Dog" },
{ _id: 2, name: "Bark", type: "Dog" },
{ _id: 3, name: "Meow", type: "Cat" }
])
Resultado:
BulkWriteResult({ "writeErrors" : [ ], "writeConcernErrors" : [ ], "nInserted" : 3, "nUpserted" : 0, "nMatched" : 0, "nModified" : 0, "nRemoved" : 0, "upserted" : [ ] })
Como mencionado, um
BulkWriteResult
objeto é retornado ao inserir uma matriz de documentos. O bulkWrite()
Método
O
bulkWrite()
permite que você execute operações de gravação em massa. Na verdade,
insertMany()
já executa operações de inserção em massa. O mesmo com insert()
ao inserir uma matriz de documentos. Mas bulkWrite()
permite que você execute operações de inserção, atualização e remoção em massa, tudo a partir de uma única chamada de método. Exemplo:
db.pets.bulkWrite([
{ insertOne: { "document": { "_id": 1, "name": "Bubbles", "type": "Fish" }}},
{ insertOne: { "document": { "_id": 2, "name": "Wag", "type": "Dog" }}},
{ updateOne : {
"filter" : { "_id" : 3 },
"update" : { $set : { "name" : "Fluffy", "type" : "Cat" } },
"upsert" : true
} },
{ replaceOne : {
"filter" : { "_id" : 4 },
"replacement" : { "name" : "Bite", "type" : "Dog", "weight": 5 },
"upsert" : true
} }
])
Resultado:
{ "acknowledged" : true, "deletedCount" : 0, "insertedCount" : 2, "matchedCount" : 0, "upsertedCount" : 2, "insertedIds" : { "0" : 1, "1" : 2 }, "upsertedIds" : { "2" : 3, "3" : 4 } }
Nesse caso, a coleção não existia de fato (deixei-a cair seguindo o exemplo anterior) e, portanto, os únicos documentos agora dentro da coleção são os especificados neste exemplo.
Vamos dar uma olhada na coleção.
db.pets.find()
Resultado:
{ "_id" : 1, "name" : "Bubbles", "type" : "Fish" } { "_id" : 2, "name" : "Wag", "type" : "Dog" } { "_id" : 3, "name" : "Fluffy", "type" : "Cat" } { "_id" : 4, "name" : "Bite", "type" : "Dog", "weight" : 5 }
Como esperado, todos os quatro documentos foram inseridos.
A Operação Upsert
Isso nos leva ao nosso quinto método para inserir documentos em uma coleção no MongoDB – a operação upsert.
Este é mais um método condicional para inserir documentos. Um upsert é uma opção que você pode usar em operações de atualização. Ele só insere um novo documento se o documento especificado ainda não existir. Se existir, o documento original será atualizado (e nenhum documento será inserido).
Já vimos exemplos de upserts. No exemplo anterior, especificamos
"upsert" : true
ao executar o updateOne
e replaceOne
operações. Isso resultou na inserção de dois documentos, pois a coleção não continha documentos que correspondessem aos seus critérios de filtro. Aqui está outro exemplo de um upsert. Desta vez, vamos usá-lo no
updateOne()
método. db.pets.updateOne(
{ name: "Harry" },
{ $set: { type: "Hamster" } },
{ upsert: true }
)
Resultado:
{ "acknowledged" : true, "matchedCount" : 0, "modifiedCount" : 0, "upsertedId" : ObjectId("5fe3dc44d991410169410524") }
Aqui, queríamos definir todos os animais de estimação chamados Harry para serem um hamster. Mas não havia animais de estimação chamados harry, então um upsert foi realizado.
Os métodos a seguir aceitam o
upsert
parâmetro:update()
updateOne()
updateMany()
findAndModify()
findOneAndUpdate()
findOneAndReplace()
Portanto, quando
upsert: true
for especificado, esses métodos executarão uma operação de upsert quando tentarem atualizar um documento inexistente.