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 comupdate()
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 valorXL
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.