Jednym ze sposobów jest użycie $cond
operator :
Zapytanie:
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
Wyjaśnienie:
Więc składnia $slice
to { $slice:[
z tego, jeśli przekażesz wartość większą niż rozmiar tablicy dla
w odpowiedzi otrzymasz pustą tablicę.
Tutaj używamy $cond
aby warunkowo wysłać dowolną wartość inputPosition
lub wartość maxNumber
do maxNumber
do 1000
ale generalnie wszystko zależy od twojego wyboru - możesz użyć mniejszej liczby, nie ma znaczenia, ta liczba powinna być większą wartością niż rozmiar twojej tablicy, możesz także rozmiar tablicy + 1 ale zamiast wykonywać tę operację, jeśli uważasz, że twoja tablica jest zawsze mniejsza niż 1000, użyj bezpośrednio
1000
.
Ref.: $slice