Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

$slice (operador de actualización)

$slice

El modificador$slicelimita el número de elementos de la matriz durante una operación$push. Para proyectar o devolver un número específico de elementos de la matriz a partir de una operación de lectura, consulte el operador de proyección$slice.

Para usar el $slice modificador,debe aparecer junto con el modificador. Puede pasar un array $each vacío [] al modificador de $each $slice manera que solo el modificador tenga efecto.

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

El <num> puede ser:

Valor
Descripción

Zero

Actualizar el arreglo <field> a un arreglo vacío.

Negativo

Para actualizar el arreglo <field> para que contenga solo los últimos <num> elementos.

Positivo

Para actualizar el arreglo <field> contiene solo los primeros <num> elementos.

A partir de MongoDB 5.0, los operadores de actualización procesan los campos de documentos con nombres basados en cadenas en orden lexicográfico. Los campos con nombres numéricos se procesan en orden numérico. Consulta Comportamiento del operador de actualización para obtener más información.

El orden en que aparecen los modificadores es irrelevante. Las versiones anteriores requerían que el modificador$eachapareciera como el primer modificador si se usaba junto con$slice. Para ver una lista de los modificadores disponibles para$push, consulte la sección Modificadores.

Intentar usar el modificador $slice $each sin el modificador produce un error.

Una colección students contiene el siguiente documento:

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

La siguiente operación agrega nuevos elementos al scores array y luego utiliza el modificador para recortar el array a los últimos cinco $slice elementos:

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

El resultado de la operación es dividir los elementos del arreglo actualizado scores en los últimos cinco elementos:

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

Una colección students contiene el siguiente documento:

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

La siguiente operación agrega nuevos elementos al scores array y luego utiliza el modificador para recortar el array a los tres primeros $slice elementos.

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

El resultado de la operación es cortar los elementos del scores actualizado para quedarse con los tres primeros elementos:

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

Una colección students contiene el siguiente documento:

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

Para actualizar el scores campo solo con los efectos del modificador, especifique el número de elementos a segmentar $slice (por-3 ejemplo,) para el modificador y una matriz $slice vacía [] para el modificador, como se muestra a $each continuación:

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

El resultado de la operación consiste en seleccionar los elementos del arreglo scores hasta los tres últimos elementos:

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

Añada el siguiente documento a la colección students:

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

La siguiente $push operación utiliza:

  • el modificador $each para agregar múltiples documentos al arreglo quizzes,

  • el modificador $sort para ordenar todos los elementos del arreglo quizzes modificado por el campo score en orden descendente, y

  • el modificador para $slice conservar solo los tres primeros elementos ordenados del 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
}
}
}
)

Después de la operación, solo los tres cuestionarios con mayor puntuación están en el arreglo:

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

El orden de los modificadores no es material para el orden en que se procesan los modificadores. Consulta Modificadores para más detalles.

Califique esta página

En esta página