Usa el update()
método o save()
método para actualizar documentos en MongoDB.
En MongoDB, tanto el update()
método y save()
El método se puede utilizar para actualizar un documento.
La update()
actualiza valores en un documento o documentos existentes, mientras que save()
El método reemplaza un documento con el documento pasado como parámetro.
Sin embargo, el update()
El método también puede reemplazar todo el documento, según el parámetro que se pase.
La update()
Método
Aquí hay un ejemplo de update()
método.
Primero, seleccionemos un registro para actualizar:
db.musicians.find({ _id: 6 }).pretty()
Resultado:
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
Jeff en realidad hace mucho más que solo cantar. Así que agreguemos algunos instrumentos más. Usaremos el $set
operador para actualizar un solo campo.
db.musicians.update( { _id: 6 }, { $set:{ instrument : [ "Vocals", "Guitar", "Sitar" ] } } )
Resultado:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Ahora si hacemos otra consulta, vemos que el documento ha sido actualizado como se especifica:
db.musicians.find({ _id: 6 }).pretty()
Resultado:
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : [ "Vocals", "Guitar", "Sitar" ], "born" : 1969 }
Algunas opciones más:
- Si el campo no existe, el
$set
el operador agregará un nuevo campo con el valor especificado, siempre que el nuevo campo no viole una restricción de tipo. - También puede usar
{ upsert: true }
para crear un nuevo documento cuando ningún documento coincida con la consulta. - Puedes usar
{ multi: true }
para actualizar varios documentos que cumplen los criterios de consulta. De forma predeterminada, esta opción está establecida enfalse
, por lo que solo se actualiza un documento si no lo establece entrue
.
El save()
Método
El save()
El método es un cruce entre update()
y insert()
. Cuando usas save()
método, si el documento existe, se actualizará. Si no existe, se creará.
Si no especifica un _id
campo, MongoDB creará un documento con un _id
que contiene un ObjectId
valor (según un insert()
).
Si especifica un _id
campo, realiza una actualización con { upsert: true }
, es decir, crea un nuevo documento si ningún documento coincide con la consulta.
Actualmente no tenemos ningún documento en nuestros
productores
recopilación. Vamos a crear uno usando save()
método:
db.producers.save({ _id: 1, name: "Bob Rock" })
Resultado:
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : 1 })
Ahora si buscamos los productores colección, vemos nuestro registro recién creado:
db.producers.find()
Resultado:
{ "_id" : 1, "name" : "Bob Rock" }