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,$sorte$slicemodificadores 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.