En måde at gøre det på er at bruge $cond
operatør:
Forespørgsel:
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 ] }
}
}
])
Test: mongoplayground
Forklaring:
Altså syntaks for $slice
er { $slice:[
fra det, hvis du sender en værdi større end størrelsen af array for
så får du et tomt array som svar.
Her bruger vi $cond
at betinget sende en af værdierne af inputPosition
eller værdien af maxNumber
til maxNumber
til 1000
men generelt afhænger det hele af dit valg - Du kan bruge et mindre tal, det gør ikke noget, det tal skal være en større værdi end størrelsen på dit array. Du kan også størrelsen af array + 1 men i stedet for at udføre den handling, hvis du mener, at dit array altid er mindre end 1000, så brug direkte
1000
.
Ref : $slice