sql >> Base de Datos >  >> NoSQL >> MongoDB

5 formas de insertar documentos en MongoDB

MongoDB proporciona muchas formas de insertar documentos en una colección.

Aquí hay 5 formas de insertar documentos en una colección cuando se usa el shell mongo.

El insertOne() Método

El insertOne() El método inserta un solo documento en una colección.

Su nombre completo es db.collection.insertOne() , donde collection es el nombre de la colección en la que insertar el documento.

Aquí hay un ejemplo de cómo insertar un documento en una colección llamada pets :

db.pets.insertOne( { 
    name: "Scratch", 
    type: "Cat" 
    } )

Resultado:

{
	"acknowledged" : true,
	"insertedId" : ObjectId("5fe2d15637b49e0faf1af214")
}

db.collection.insertOne() método devuelve un documento que contiene:

  • Un acknowledged como true si la operación se ejecutó con problemas de escritura o false si el problema de escritura estaba deshabilitado.
  • Un campo insertedId con el _id valor del documento insertado.

El insertMany() Método

El insertMany() el método es similar a insertOne() , excepto que inserta varios documentos en una colección.

También de forma similar a insertOne() , su nombre completo es db.collection.insertMany() , donde collection es el nombre de la colección en la que insertar el documento. Esto se aplica a todos los métodos enumerados en este artículo.

Aquí hay un ejemplo del uso de db.collection.insertMany() para insertar múltiples documentos en una colección llamada 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 ] } 

db.collection.insertMany() método devuelve un documento que contiene:

  • Un acknowledged como true si la operación se ejecutó con problemas de escritura o false si el problema de escritura estaba deshabilitado.
  • Una matriz de _id valores para cada documento insertado con éxito.

El insert() Método

El insert() El método es como una combinación de insertOne() y insertMany() . Le permite insertar un solo documento o varios documentos en una colección.

Aquí hay un ejemplo del uso de db.collection.insert() para insertar un solo documento:

db.pets.insert(
    { name: "Bruce", type: "Bat" }
    )

Resultado:

WriteResult({ "nInserted" : 1 })

Cuando se inserta un solo documento, db.collection.insert() devuelve un WriteResult objeto. Cuando se inserta una matriz de documentos, devuelve un BulkWriteResult objeto.

Aquí hay un ejemplo del uso de db.collection.insert() para insertar varios 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 se mencionó, un BulkWriteResult El objeto se devuelve al insertar una matriz de documentos.

El bulkWrite() Método

bulkWrite() El método le permite realizar operaciones de escritura masiva.

En realidad, insertMany() ya realiza operaciones de inserción masiva. Lo mismo con insert() al insertar una matriz de documentos. Pero bulkWrite() le permite realizar operaciones masivas de inserción, actualización y eliminación, todo desde una única llamada de método.

Ejemplo:

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
	}
}

En este caso, la colección en realidad no existía (la descarté siguiendo el ejemplo anterior), por lo que los únicos documentos ahora dentro de la colección son los especificados en este ejemplo.

Echemos un vistazo a la colección.

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 era de esperar, se insertaron los cuatro documentos.

La Operación Upsert

Esto nos lleva a nuestro quinto método para insertar documentos en una colección en MongoDB:la operación upsert.

Este es más un método condicional para insertar documentos. Un upsert es una opción que puede usar en las operaciones de actualización. Solo inserta un nuevo documento si el documento especificado aún no existe. Si existe, el documento original se actualiza (y no se inserta ningún documento).

Ya hemos visto ejemplos de upserts. En el ejemplo anterior, especificamos "upsert" : true al realizar el updateOne y replaceOne operaciones. Eso resultó en la inserción de dos documentos, porque la colección no contenía documentos que coincidieran con sus criterios de filtro.

Aquí hay otro ejemplo de un upsert. Esta vez, lo usaremos en updateOne() método.

db.pets.updateOne( 
    { name: "Harry" },
    { $set: { type: "Hamster" } },
    { upsert: true }
    )

Resultado:

{
	"acknowledged" : true,
	"matchedCount" : 0,
	"modifiedCount" : 0,
	"upsertedId" : ObjectId("5fe3dc44d991410169410524")
}

Aquí, queríamos que todas las mascotas llamadas Harry fueran un hámster. Pero no había mascotas llamadas harry, por lo que se realizó un upsert.

Los siguientes métodos aceptan upsert parámetro:

  • update()
  • updateOne()
  • updateMany()
  • findAndModify()
  • findOneAndUpdate()
  • findOneAndReplace()

Por lo tanto, cuando upsert: true se especifica, estos métodos realizarán una operación upsert cuando intenten actualizar un documento inexistente.