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
comotrue
si la operación se ejecutó con problemas de escritura ofalse
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
comotrue
si la operación se ejecutó con problemas de escritura ofalse
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.