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