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

2 formas de agregar un valor a una matriz en MongoDB

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.