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.