Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

$slice (operador de actualización)

$slice

La $slice El modificador limita el número de elementos del arreglo durante un $push operación. Para proyectar o devolver un número especificado de elementos de arreglo de una operación de lectura, consulta el operador de proyección $slice en su lugar.

Para utilizar el modificador $slice, debe aparecer con el modificador $each. Puedes pasar un arreglo vacío [] al modificador $each de modo que sólo el modificador $slice 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 el que aparecen los modificadores es irrelevante. Las versiones anteriores requerían que el modificador $each apareciera como el primer modificador si se usaba junto con $slice. Para obtener una lista de modificadores disponibles para $push, consulte Modificadores.

Intentar utilizar el modificador $slice sin el modificador $each resulta en un error.

Una colección students contiene el siguiente documento:

db.students.insertOne([
{ _id : 1, "scores" : [ 40, 50, 60 ] }
] )

La siguiente operación añade nuevos elementos al arreglo scores y luego utiliza el modificador $slice para acortar el arreglo a los últimos cinco 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:

db.students.insertOne( [
{ _id : 2, "scores" : [ 89, 90 ] }
] )

La siguiente operación añade nuevos elementos al arreglo scores, y luego utiliza el modificador $slice para recortar el arreglo a los tres primeros 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:

db.students.insertOne( [
{ _id : 3, "scores" : [ 89, 70, 100, 20 ] }
] )

Para actualizar el campo scores solo con los efectos del modificador $slice, especifica el número de elementos a recortar (por ejemplo, -3) para el $slice modificador y un arreglo vacío [] para el $each modificador, como en el siguiente ejemplo:

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 sólo los tres primeros elementos ordenados del quizzes arreglo.

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.

Volver

$position

En esta página