Definição
$positionThe
$positionmodifier specifies the location in the array at which the$pushoperator inserts elements. Without the$positionmodifier, the$pushoperator inserts elements to the end of the array. See $push modifiers for more information.To use the
$positionmodifier, it must appear with the$eachmodifier.{ $push: { <field>: { $each: [ <value1>, <value2>, ... ], $position: <num> } } } <num>indica a posição na array, com base em um índice de array baseado em zero (posição):Um número negativo corresponde à posição na array, contando a partir do (mas não incluindo o) último elemento da array. Por exemplo,
-1indica a posição imediatamente antes do último elemento da array. Se você especificar vários elementos na array$each, o último elemento adicionado estará na posição especificada a partir do final. Se o valor absoluto de<num>for maior ou igual ao comprimento da array, o$pushadicionará elementos ao início da array.
Comportamento
A partir do MongoDB 5.0, os operadores de atualização processam campos de documento com nomes baseados em cadeia de caracteres em ordem lexicográfica. Os campos com nomes numéricos são processados em ordem numérica. Consulte Atualizar Comportamento de Operadores para detalhes.
Exemplos
Adicionar elementos no início da bandeja
Crie a coleção students:
db.students.insertOne( { "_id" : 1, "scores" : [ 100 ] } )
A seguinte operação atualiza o campo scores para adicionar os elementos 50, 60 e 70 ao início da array:
db.students.updateOne( { _id: 1 }, { $push: { scores: { $each: [ 50, 60, 70 ], $position: 0 } } } )
A operação resulta no seguinte documento atualizado:
{ "_id" : 1, "scores" : [ 50, 60, 70, 100 ] }
Adicione elementos ao meio do array
Adicionar um documento à coleção students:
db.students.insertOne( { "_id" : 2, "scores" : [ 50, 60, 70, 100 ] } )
A seguinte operação atualiza o campo scores para adicionar os elementos 20 e 30 no índice de array (posição) de 2:
db.students.updateOne( { _id: 2 }, { $push: { scores: { $each: [ 20, 30 ], $position: 2 } } } )
A operação resulta no seguinte documento atualizado:
{ "_id" : 2, "scores" : [ 50, 60, 20, 30, 70, 100 ] }
Use um índice de array negativo (posição) para adicionar elementos ao array
$position can accept a negative array index (position) value to indicate the position starting from the end, counting from (but not including) the last element of the array. For example, -1 indicates the position just before the last element in the array.
Adicione o seguinte documento à coleção students:
db.students.insertOne( { "_id" : 3, "scores" : [ 50, 60, 20, 30, 70, 100 ] } )
The following operation specifies -2 for the $position to add 90 at the position two places before the last element, and then 80 at the position two places before the last element.
Importante
Com um índice de array negativo (posição), se você especificar vários elementos na array $each, o último elemento adicionado estará na posição especificada a partir do final.
db.students.updateOne( { _id: 3 }, { $push: { scores: { $each: [ 90, 80 ], $position: -2 } } } )
A operação resulta no seguinte documento atualizado:
{ "_id" : 3, "scores" : [ 50, 60, 20, 30, 90, 80, 70, 100 ] }