Definición
$positionEl modificador
$positionespecifica la posición en el array donde el operador$pushinserta elementos. Sin el modificador$position, el operador$pushinserta elementos al final del array. Consulte los modificadores $push para obtener más información.Para usar el
$positionmodificador,debe aparecer con el$eachmodificador.{ $push: { <field>: { $each: [ <value1>, <value2>, ... ], $position: <num> } } } <num>indica la posición en el arreglo, basada en un índice de arreglo base cero (posición):Un número negativo corresponde a la posición en el arreglo, contando desde (pero sin incluir) el último elemento del arreglo. Por ejemplo,
-1indica la posición justo antes del último elemento en el arreglo. Si especificas varios elementos en el arreglo$each, el último elemento añadido ocupa la posición especificada desde el final. Si el valor absoluto de<num>es mayor o igual que la longitud del arreglo, el$pushagrega elementos al principio del arreglo.
Comportamiento
A partir de MongoDB 5.0, los operadores de actualización procesan los campos de documentos con nombres basados en cadenas en orden lexicográfico. Los campos con nombres numéricos se procesan en orden numérico. Consulta Comportamiento del operador de actualización para obtener más información.
Ejemplos
Agregar elementos al inicio del arreglo
Crear la colección students:
db.students.insertOne( { "_id" : 1, "scores" : [ 100 ] } )
La siguiente operación actualiza el campo scores para agregar los elementos 50, 60 y 70 al inicio del arreglo:
db.students.updateOne( { _id: 1 }, { $push: { scores: { $each: [ 50, 60, 70 ], $position: 0 } } } )
La operación resultó en el siguiente documento actualizado:
{ "_id" : 1, "scores" : [ 50, 60, 70, 100 ] }
Añadir elementos a la mitad del arreglo
Agregue un documento a la colección students:
db.students.insertOne( { "_id" : 2, "scores" : [ 50, 60, 70, 100 ] } )
La siguiente operación actualiza el campo scores para agregar los elementos 20 y 30 en el índice de arreglo (posición) 2:
db.students.updateOne( { _id: 2 }, { $push: { scores: { $each: [ 20, 30 ], $position: 2 } } } )
La operación resultó en el siguiente documento actualizado:
{ "_id" : 2, "scores" : [ 50, 60, 20, 30, 70, 100 ] }
Uso de un índice (posición) de arreglo negativo para añadir elementos al arreglo
$position puede aceptar un valor de índice (posición) negativo para indicar la posición comenzando desde el final, contando desde (pero sin incluir) el último elemento del array. Por ejemplo, -1 indica la posición justo antes del último elemento del array.
Añada el siguiente documento a la colección students:
db.students.insertOne( { "_id" : 3, "scores" : [ 50, 60, 20, 30, 70, 100 ] } )
La siguiente operación especifica -2 para que $position agregue 90 en la posición dos lugares antes del último elemento, y luego 80 en la posición dos lugares antes del último elemento.
Importante
Con un índice (posición) de arreglo negativo, si especificas varios elementos en el arreglo $each, el último elemento añadido está en la posición especificada contando desde el final.
db.students.updateOne( { _id: 3 }, { $push: { scores: { $each: [ 90, 80 ], $position: -2 } } } )
La operación resultó en el siguiente documento actualizado:
{ "_id" : 3, "scores" : [ 50, 60, 20, 30, 90, 80, 70, 100 ] }