Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

$position

Nesta página

  • Definição
  • Comportamento
  • Exemplos
$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.

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.

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

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

$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 pouco 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 ] }
← $ cada
$slice →