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

Inserir um valor em uma posição específica em um array no MongoDB


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.