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
acknowledgedcomotruese a operação foi executada com preocupação de gravação oufalsese a preocupação de gravação foi desativada. - Um campo
insertedIdcom o_idvalor 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
acknowledgedcomotruese a operação foi executada com preocupação de gravação oufalsese a preocupação de gravação foi desativada. - Uma matriz de
_idvalores 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.