No MongoDB, você pode usar o
$push
operador para anexar um valor a uma matriz. Este operador pode ser usado com vários modificadores, um dos quais é o
$position
modificador. A $position
modificador permite que você especifique a posição dentro da matriz que você deseja inserir o novo valor. Adicione valor ao início da matriz
Suponha que temos a seguinte coleção:
{ "_id" :1, "prod" :"Bat", "sizes" :[ "S", "M", "XL" ] }{ "_id" :2, "prod" :"Hat" , "sizes" :[ "S", "L", "XL" ] }{ "_id" :3, "prod" :"Cap", "sizes" :[ "M", "L" ] }
E suponha que queremos adicionar um valor ao início do array no documento 3.
Nós podemos fazer isso:
db.products.update( { _id: 3 }, { $push: { sizes: { $each: [ "S" ], $position: 0 } } } )
Agora vamos verificar a coleção novamente:
db.products.find()
Resultado:
{ "_id" :1, "prod" :"Bat", "sizes" :[ "S", "M", "XL" ] }{ "_id" :2, "prod" :"Hat" , "sizes" :[ "S", "L", "XL" ] }{ "_id" :3, "prod" :"Cap", "sizes" :[ "S", "M", "L" ] }
Arrays são baseados em zero, entãoposition: 0
adiciona o valor como o primeiro elemento na matriz.
Adicione um valor ao meio da matriz
Suponha que queremos adicionar o valorM
para o documento 2, e queremos que ele fique entreS
eL
.
Veja como podemos fazer isso:
db.products.update( { _id: 2 }, { $push: { sizes: { $each: [ "M" ], $position: 1 } } } )
Agora vamos verificar a coleção novamente:
db.products.find()
Resultado:
{ "_id" :1, "prod" :"Bat", "sizes" :[ "S", "M", "XL" ] }{ "_id" :2, "prod" :"Hat" , "sizes" :[ "S", "M", "L", "XL" ] }{ "_id" :3, "prod" :"Cap", "sizes" :[ "S", "M" , "L" ] }
Usamos$position: 1
, porque essa é a posição que queríamosM
para ir (ou seja, a segunda posição).
Valores negativos
Você também pode fornecer um valor negativo como a posição. Ao fazer isso, o valor é inserido na posição negativa especificada contando de volta a partir do final.
Suponha que queremos inserirL
entreM
eXL
no documento 1.
Veja como faríamos isso usando uma posição negativa:
db.products.update( { _id: 1 }, { $push: { sizes: { $each: [ "L" ], $position: -1 } } } )
Confira o resultado:
db.products.find()
Resultado:
{ "_id" :1, "prod" :"Bat", "sizes" :[ "S", "M", "L", "XL" ] }{ "_id" :2, "prod" :"Hat", "sizes" :[ "S", "M", "L", "XL" ] }{ "_id" :3, "prod" :"Cap", "sizes" :[ "S" , "M", "L" ] }
Com uma posição de índice negativa, se você especificar vários elementos no$each
array, o último elemento adicionado está na posição especificada a partir do final.