Salah satu caranya adalah dengan menggunakan $cond operator :
Kueri :
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 ] }
}
}
])
Uji : mongoplayground
Penjelasan :
Jadi sintaks $slice adalah { $slice: [ <array>, <position>, <n> ] } dari itu jika Anda memberikan nilai yang lebih besar dari ukuran array untuk <position> maka Anda akan mendapatkan array kosong sebagai tanggapan.
Di sini kita menggunakan $cond untuk mengirim secara kondisional salah satu nilai inputPosition atau nilai maxNumber ke <position> . Selain itu, saya memiliki nilai kode keras maxNumber ke 1000 tetapi secara umum itu semua tergantung pada pilihan Anda - Anda dapat menggunakan angka yang lebih kecil, tidak masalah, angka itu harus lebih besar dari ukuran array Anda, Anda juga dapat size of array + 1 tetapi alih-alih melakukan operasi itu jika Anda yakin array Anda selalu kurang dari 1000 maka langsung gunakan 1000 .
Ref : $slice