En MongoDB, puede usar el $pop
operador para eliminar el primer o último elemento de una matriz.
Usa $pop
junto con un método como update()
para actualizar el documento especificado con el cambio.
Utilice -1
para eliminar el primer elemento, y 1
para eliminar el último.
Ejemplo
Supongamos que tenemos una colección llamada products
con los siguientes documentos:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
Eliminar el primer elemento
Podemos eliminar el primer elemento de la matriz en el documento 1 de esta manera:
db.products.update(
{ _id: 1 },
{ $pop: { sizes: -1 } }
)
Salida:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Ese mensaje nos dice que un documento coincidió y otro (es decir, el mismo documento) fue modificado.
Echemos un vistazo a la colección ahora:
db.products.find()
Resultado:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "M", "L", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
Podemos ver que el primer elemento de la matriz en el documento 1 ha sido eliminado.
Eliminar el último elemento
Ahora eliminemos el último elemento de la matriz en el documento 2:
db.products.update(
{ _id: 2 },
{ $pop: { sizes: 1 } }
)
Salida:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Ahora revisemos la colección nuevamente:
db.products.find()
Resultado:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "M", "L", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
Podemos ver que el último elemento ha sido eliminado de la matriz en el documento 2.
Actualizar todos los documentos
Aquí hay un ejemplo que usa updateMany()
método para actualizar todos los documentos:
db.products.updateMany(
{ },
{ $pop: { sizes: 1 } }
)
Salida:
{ "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 }
Y vuelva a comprobar la colección:
db.products.find()
Resultado:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "M", "L" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M" ] }
Alternativamente, puede usar update()
método para actualizar múltiples documentos especificando multi: true
.