Ett sätt att göra är att använda $cond operatör :
Fråga:
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
Förklaring:
Så syntax för $slice är { $slice:[ från det om du skickar ett värde som är större än storleken på arrayen för då får du en tom array som svar.
Här använder vi $cond för att villkorligt skicka endera värdet av inputPosition eller värdet på maxNumber till . Dessutom har jag ett hårdkodat värde på maxNumber till 1000 men i allmänhet beror allt på ditt val - Du kan använda ett lägre antal, det spelar ingen roll, det numret bör vara ett större värde än storleken på din array, Du kan också storleken på arrayen + 1 men istället för att göra den operationen om du tror att din array alltid är mindre än 1000 så använd direkt 1000 .
Ref : $slice