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