Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / / /

$slice

Nesta página

  • Comportamento
  • Exemplos
$slice

O modificador $slice limita o número de elementos da array durante uma operação $push . Para projeto ou retornar um número específico de elementos de array de uma operação de leitura, consulte o operador de projeção $slice .

Para utilizar o modificador $slice, ele deve aparecer com o modificador $each. Você pode passar uma array vazia [] para o modificador $each de modo que apenas o modificador $slice tenha efeito.

{
$push: {
<field>: {
$each: [ <value1>, <value2>, ... ],
$slice: <num>
}
}
}

O <num> pode ser:

Valor
Descrição
Zero
Para atualizar a array <field> para uma array vazia.
Negativo
Para atualizar a array <field> para conter somente os últimos <num> elementos.
Positivo
Para atualizar a array <field> contém apenas os primeiros elementos <num> .

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.

A ordem em que os modificadores aparecem é irrelevante. As versões anteriores exigiam que o modificador $each aparecesse como o primeiro modificador se usado em conjunto com $slice. Para uma lista de modificadores disponíveis para $push, consulte Modificadores.

Tentar utilizar o modificador $slice sem o modificador $each resulta em um erro.

Uma collection students contém o seguinte documento:

{ "_id" : 1, "scores" : [ 40, 50, 60 ] }

A operação a seguir adiciona novos elementos à array scores e, em seguida, usa o modificador $slice para cortar a array até os últimos cinco elementos:

db.students.updateOne(
{ _id: 1 },
{
$push: {
scores: {
$each: [ 80, 78, 86 ],
$slice: -5
}
}
}
)

O resultado da operação é fatiar os elementos da array scores atualizada para os últimos cinco elementos:

{ "_id" : 1, "scores" : [ 50, 60, 80, 78, 86 ] }

Uma collection students contém o seguinte documento:

{ "_id" : 2, "scores" : [ 89, 90 ] }

A operação a seguir adiciona novos elementos à array scores e, em seguida, usa o modificador $slice para cortar a array até os três primeiros elementos.

db.students.updateOne(
{ _id: 2 },
{
$push: {
scores: {
$each: [ 100, 20 ],
$slice: 3
}
}
}
)

O resultado da operação é dividir os elementos da array scores atualizada para os três primeiros elementos:

{ "_id" : 2, "scores" : [ 89, 90, 100 ] }

Uma collection students contém o seguinte documento:

{ "_id" : 3, "scores" : [ 89, 70, 100, 20 ] }

Para atualizar o campo scores apenas com os efeitos do modificador $slice, especifique o número de elementos a serem fatiados (por exemplo -3) para o modificador $slice e uma array vazia [] para o modificador $each, como no exemplo a seguir:

db.students.updateOne(
{ _id: 3 },
{
$push: {
scores: {
$each: [ ],
$slice: -3
}
}
}
)

O resultado da operação é dividir os elementos da array scores para os últimos três elementos:

{ "_id" : 3, "scores" : [ 70, 100, 20 ] }

Adicione o seguinte documento à coleção students:

db.students.insertOne(
{
"_id" : 5,
"quizzes" : [
{ "wk": 1, "score" : 10 },
{ "wk": 2, "score" : 8 },
{ "wk": 3, "score" : 5 },
{ "wk": 4, "score" : 6 }
]
}
)

A seguinte operação do $push utiliza:

  • o modificador $each para adicionar vários documentos à array quizzes,

  • o modificador $sort para ordenar todos os elementos da array quizzes modificada pelo campo score em ordem decrescente e

  • O modificador $slice para manter apenas os três primeiros elementos ordenados da array quizzes.

db.students.updateOne(
{ _id: 5 },
{
$push: {
quizzes: {
$each: [ { wk: 5, score: 8 }, { wk: 6, score: 7 }, { wk: 7, score: 6 } ],
$sort: { score: -1 },
$slice: 3
}
}
}
)

Após a operação, somente os três testes de pontuação mais alta estão na array:

{
"_id" : 5,
"quizzes" : [
{ "wk" : 1, "score" : 10 },
{ "wk" : 2, "score" : 8 },
{ "wk" : 5, "score" : 8 }
]
}

A ordem dos modificadores é imaterial à ordem em que os modificadores são processados. Consulte Modificadores para detalhes.

Voltar

$position