Eine Möglichkeit ist die Verwendung von $cond
Betreiber :
Abfrage :
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
Erklärung:
Also Syntax von $slice
ist { $slice: [ <array>, <position>, <n> ] }
davon, wenn Sie einen Wert übergeben, der größer als die Größe des Arrays für <position>
ist dann erhalten Sie ein leeres Array als Antwort.
Hier verwenden wir $cond
um bedingt einen der Werte von inputPosition
zu senden oder Wert von maxNumber
zu <position>
. Außerdem habe ich einen hartcodierten Wert von maxNumber
bis 1000
aber im Allgemeinen hängt alles von Ihrer Wahl ab - Sie können eine kleinere Zahl verwenden, es spielt keine Rolle, diese Zahl sollte einen größeren Wert als die Größe Ihres Arrays haben. Sie können auch size of array + 1
aber anstatt diese Operation durchzuführen, wenn Sie glauben, dass Ihr Array immer kleiner als 1000 ist, verwenden Sie direkt 1000
.
Referenz: $slice