MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

5 maneiras de inserir documentos no MongoDB


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 como true se a operação foi executada com preocupação de gravação ou false 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 como true se a operação foi executada com preocupação de gravação ou false 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.