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

MongoDB $ pop

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 .