Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

$slice (operador de atualização)

$slice

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

Para utilizar o $slice modificador, ele deve aparecer com o modificador. Você pode passar uma array $each vazia [] para o modificador de $each $slice modo que apenas o modificador 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 é imaterial. As versões anteriores exigiam que o modificador aparecesse como o $each primeiro modificador se usado em conjunto com. Para uma $slice $push lista de modificadores disponíveis para, consulte Modificadores.

Tentar utilizar o modificador $slice $each sem o modificador 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 à scores array e, em seguida, usa o modificador para cortar a array até os últimos cinco $slice 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 à scores array e, em seguida, usa o modificador para cortar a array para os três primeiros $slice 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 scores campo apenas com os efeitos do modificador, especifique o número de elementos a serem fatiados $slice (por-3 exemplo,) para o modificador e uma array $slice vazia [] para o modificador , como a $each 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 para $slice manter apenas os três primeiros elementos classificados da quizzes array.

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.

Avalie esta página