Una forma de hacerlo es usar $cond
operador :
Consulta:
let inputPosition = -70
let positionConverted = -position // 70
let maxNumber = 1000
db.collection.aggregate([
{
$project: {
comments: {
$slice: [ "$comments",
{ $cond: [ { $gte: [ { $size: "$comments" }, positionConverted ] }, inputPosition, maxNumber ] }, 5 ] }
}
}
])
Explicación:
Así que la sintaxis de $slice
es { $slice: [ <array>, <position>, <n> ] }
de eso, si pasa un valor mayor que el tamaño de la matriz para <position>
entonces obtendrá una matriz vacía como respuesta.
Aquí estamos usando $cond
para enviar condicionalmente cualquier valor de inputPosition
o valor de maxNumber
a <position>
. Además, tengo un valor codificado de maxNumber
a 1000
pero, en general, todo depende de su elección:puede usar un número menor, no importa, ese número debe ser un valor mayor que el tamaño de su matriz. También puede size of array + 1
pero en lugar de hacer esa operación, si cree que su matriz siempre es inferior a 1000, use directamente 1000
.
Referencia: $slice