Een manier om dit te doen is om $cond
. te gebruiken operator :
Vraag:
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
Uitleg:
Dus syntaxis van $slice
is { $slice: [ <array>, <position>, <n> ] }
daarvan af als u een waarde doorgeeft die groter is dan de grootte van de array voor <position>
dan krijg je als reactie een lege array.
Hier gebruiken we $cond
om voorwaardelijk een van beide waarden van inputPosition
te verzenden of waarde van maxNumber
naar <position>
. Bovendien heb ik een hard gecodeerde waarde van maxNumber
tot 1000
maar in het algemeen hangt het allemaal af van je keuze - je kunt een kleiner getal gebruiken, het maakt niet uit, dat getal moet een grotere waarde zijn dan de grootte van je array, je kunt ook size of array + 1
code> maar in plaats van die bewerking uit te voeren als je denkt dat je array altijd kleiner is dan 1000, gebruik dan direct 1000
.
Ref: $slice