MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

2 maneiras de anexar um valor a um array no MongoDB


Se você tiver uma coleção de documentos no MongoDB que contenha matrizes, poderá adicionar novos valores a essas matrizes, se necessário.

Dependendo de seus requisitos específicos, você pode usar o $push operador ou o $addToSet operador.

O $push Operador


Suponha que tenhamos uma coleção chamada products com os seguintes documentos:
{ "_id" :1, "product" :"Bat", "sizes" :[ "S", "M", "L" ] }{ "_id" :2, "product" :"Hat" , "sizes" :[ "S", "L", "XL" ] }{ "_id" :3, "product" :"Cap", "sizes" :[ "M", "L" ] } 
E digamos que queremos anexar um valor ao array no documento 3.

Podemos usar $push em conjunto com update() para anexar o valor:
db.products.update(
   { _id: 3 },
   { $push: { sizes: "XL" } }
) 

Vamos examinar a coleção novamente para verificar a alteração:
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 o valor XL foi adicionado ao array no documento 3.

O $push operador também pode ser usado com vários modificadores, como $position , $sort e $slice .

Você também pode adicionar vários valores à matriz usando o $each modificador.

Veja MongoDB $push por exemplo.

O $addToSet Operador


O $addToSet operador funciona de maneira semelhante ao $push , exceto por algumas coisas:
  • Se o valor que você está tentando adicionar já existir na matriz, ele não será adicionado.
  • A $position , $sort e $slice modificadores não podem ser usados ​​com $addToSet .

Suponha que nossa coleção seja assim:
{ "_id" :1, "product" :"Bat", "sizes" :[ "S", "M", "L", "XL" ] }{ "_id" :2, "product" :"Chapéu", "tamanhos" :[ "S", "L", "XL" ] }{ "_id" :3, "produto" :"Boné", "tamanhos" :[ "S", "M" , "L", "XL" ] }

Vamos inserir vários valores no array no documento 2:
db.products.update(
   { _id: 2 },
   { 
     $addToSet: { 
        sizes: {
           $each: [ "XXL", "XXXL" ]
        }
      } 
    }
) 

Agora vamos verificar a coleção novamente:
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 os dois valores foram anexados ao array no documento 2 como esperado.

Este exemplo usa o $each modificador, que você também pode usar com o $push operador.

Eu usei apenas o $each modificador porque eu estava adicionando vários valores. Se eu estivesse usando apenas um valor, poderia ter omitido o $each modificador, e a sintaxe teria parecido mais com o $push acima exemplo.

Como mencionado, se o valor já existir, ele não será adicionado. Além disso, com ambos os operadores, se você adicionar um array, o array inteiro será adicionado como um valor separado dentro do array existente.

Veja MongoDB $addToSet para mais exemplos.