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