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ão position: 0 adiciona o valor como o primeiro elemento na matriz.
Adicione um valor ao meio da matriz
Suponha que queremos adicionar o valor M para o documento 2, e queremos que ele fique entre S e L .
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íamos M 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 inserir L entre M e XL 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.