$position
Nesta página
Definição
$position
O modificador
$position
especifica o local na array em que o operador$push
insere elementos. Sem o modificador$position
, o operador$push
insere elementos no final da array. Consulte modificadores $push para obter mais informações.Para utilizar o modificador
$position
, ele deve aparecer com o modificador$each
.{ $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 não negativo corresponde à posição na array, começando do início da array. Se o valor de
<num>
for maior ou igual ao comprimento da array, o modificador$position
não terá efeito e$push
adicionará elementos ao final da array.Um número negativo corresponde à posição na array, contando a partir do (mas não incluindo o) último elemento da array. Por exemplo,
-1
indica 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$push
adicionará 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
pode aceitar um valor de índice de array negativa (posição) para indicar a posição a partir do final, contando a partir (mas não incluindo) o último elemento da array. Por exemplo, -1
indica a posição imediatamente antes do último elemento na array.
Adicione o seguinte documento à coleção students
:
db.students.insertOne( { "_id" : 3, "scores" : [ 50, 60, 20, 30, 70, 100 ] } )
A operação a seguir especifica -2
para $position
para adicionar 90
na posição duas casas antes do último elemento e, em seguida, 80
na posição duas casas antes do último elemento.
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 ] }