sql >> Base de Datos >  >> NoSQL >> MongoDB

Insertar un valor en una posición específica en una matriz en MongoDB

En MongoDB, puede usar el $push operador para agregar un valor a una matriz.

Este operador se puede usar con varios modificadores, uno de los cuales es $position modificador La $position El modificador le permite especificar la posición dentro de la matriz en la que desea insertar el nuevo valor.

Agregar valor al comienzo de la matriz

Supongamos que tenemos la siguiente colección:

{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "M", "L" ] }

Y supongamos que queremos agregar un valor al inicio de la matriz en el documento 3.

Podemos hacer esto:

db.products.update(
   { _id: 3 },
   { 
     $push: { 
        sizes: {
           $each: [ "S" ],
           $position: 0
        }
      } 
    }
)

Ahora revisemos la colección nuevamente:

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" ] }

Las matrices están basadas en cero, por lo que position: 0 agrega el valor como el primer elemento de la matriz.

Agregue un valor a la mitad de la matriz

Supongamos que queremos agregar el valor M al documento 2, y queremos que vaya entre S y L .

Así es como podemos hacerlo:

db.products.update(
   { _id: 2 },
   { 
     $push: { 
        sizes: {
           $each: [ "M" ],
           $position: 1
        }
      } 
    }
)

Ahora revisemos la colección nuevamente:

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 esa es la posición que queríamos M ir (es decir, la segunda posición).

Valores negativos

También puede proporcionar un valor negativo como posición. Cuando hace esto, el valor se inserta en la posición negativa especificada contando hacia atrás desde el final.

Supongamos que queremos insertar L entre M y XL en el documento 1.

Así es como lo haríamos usando una posición negativa:

db.products.update(
   { _id: 1 },
   { 
     $push: { 
        sizes: {
           $each: [ "L" ],
           $position: -1
        }
      } 
    }
)

Compruebe el 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" ] }

Con una posición de índice negativa, si especifica varios elementos en el $each matriz, el último elemento agregado está en la posición especificada desde el final.