Uma maneira de fazer é 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 ] }
}
}
])
Teste: mongoplayground
Explicação:
Portanto, a sintaxe de
$slice
é { $slice:[ , , ] }
a partir disso, se você passar um valor maior que o tamanho do array para
então você receberá uma matriz vazia em resposta. Aqui estamos usando
$cond
para enviar condicionalmente qualquer valor de inputPosition
ou valor de maxNumber
para
. Além disso, tenho um valor codificado de maxNumber
para 1000
mas em geral tudo depende da sua escolha - Você pode usar um número menor, não importa, esse número deve ser um valor maior que o tamanho do seu array, Você também pode size of array + 1 mas em vez de fazer essa operação, se você acredita que sua matriz é sempre menor que 1000, use diretamente 1000
.
Referência: $slice