Един от начините е да използвате $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