Docs Menu
Docs Home
/ /

$slice (update modifier)

$slice

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

Para usar el $slice modificador,debe aparecer junto con el modificador. Puede pasar una matriz $each vacía [] al modificador de $each $slice modo que solo el modificador tenga efecto.

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

El <num> puede ser:

Valor
Descripción

Zero

Para actualizar la matriz <field> a una matriz vacía.

Negativo

Para actualizar la matriz <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 apareciera como el $each primero si se usaba junto con.$slice Para ver la lista $push de modificadores disponibles para, consulte Modificadores.

Intentar utilizar el modificador $slice $each sin el modificador da como resultado un error.

Una colección students contiene el siguiente documento:

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

La siguiente operación agrega nuevos elementos a la scores matriz y luego utiliza el modificador para recortar la matriz 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 cortar los elementos de la matriz scores actualizada 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 a la scores matriz y luego utiliza el modificador para recortar la matriz a los primeros tres $slice elementos.

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

El resultado de la operación es dividir los elementos de la matriz scores actualizada en los primeros tres 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 la cantidad de elementos a cortar $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 es cortar los elementos de la matriz scores en los últimos tres 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 operación $push 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 mantener solo los primeros tres elementos ordenados de la quizzes matriz.

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 es irrelevante para su procesamiento. Consulte Modificadores para obtener más información.

Volver

$position

En esta página