Един от начините е да използвате $cond оператор :
Запитване:
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 ] }
}
}
])
Тест: mongoplayground
Обяснение:
Така че синтаксисът на $slice е { $slice:[ от това, ако подадете стойност, по-голяма от размера на масива за тогава ще получите празен масив в отговор.
Тук използваме $cond за условно изпращане на стойност на inputPosition или стойност на maxNumber към <позиция>код> . Освен това имам твърдо кодирана стойност maxNumber до 1000 но като цяло всичко зависи от вашия избор - можете да използвате по-малко число, няма значение, това число трябва да е по-голяма от размера на вашия масив, можете също да размер на масива + 1код> но вместо да извършвате тази операция, ако смятате, че вашият масив винаги е по-малък от 1000, тогава директно използвайте 1000 .
Справка: $slice