Si tiene una colección de documentos en MongoDB que contienen matrices, puede agregar nuevos valores a esas matrices si es necesario.
Dependiendo de sus requisitos específicos, puede usar el $push
operador o el $addToSet
operador.
El $push
Operador
Supongamos que tenemos una colección llamada products
con los siguientes documentos:
{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L" ] } { "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 3, "product" : "Cap", "sizes" : [ "M", "L" ] }
Y digamos que queremos agregar un valor a la matriz en el documento 3.
Podemos usar $push
junto con update()
para agregar el valor:
db.products.update(
{ _id: 3 },
{ $push: { sizes: "XL" } }
)
Miremos la colección nuevamente para verificar el cambio:
db.products.find()
Resultado:
{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L" ] } { "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 3, "product" : "Cap", "sizes" : [ "M", "L", "XL" ] }
Podemos ver que el valor XL
se ha agregado a la matriz en el documento 3.
El $push
El operador también se puede usar con varios modificadores, como $position
, $sort
y $slice
.
También puede agregar múltiples valores a la matriz usando $each
modificador.
Ver MongoDB $push
para ejemplos.
El $addToSet
Operador
El $addToSet
El operador funciona de manera similar a $push
, excepto por un par de cosas:
- Si el valor que intenta agregar ya existe en la matriz, no se agregará.
- La
$position
,$sort
y$slice
los modificadores no se pueden usar con$addToSet
.
Supongamos que nuestra colección se ve así:
{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }
Insertemos múltiples valores a la matriz en el documento 2:
db.products.update(
{ _id: 2 },
{
$addToSet: {
sizes: {
$each: [ "XXL", "XXXL" ]
}
}
}
)
Ahora revisemos la colección nuevamente:
db.products.find()
Resultado:
{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL", "XXL", "XXXL" ] } { "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }
Podemos ver que los dos valores se agregaron a la matriz en el documento 2 como se esperaba.
Este ejemplo usa el $each
modificador, que también puedes usar con el $push
operador.
Solo usé el $each
modificador porque estaba agregando múltiples valores. Si solo estuviera usando un valor, podría haber omitido $each
modificador, y la sintaxis se habría parecido más a la anterior $push
ejemplo.
Como se mencionó, si el valor ya existe, no se agregará. Además, con ambos operadores, si agrega una matriz, la matriz completa se agregará como un valor separado dentro de la matriz existente.
Ver MongoDB $addToSet
para más ejemplos.