Một cách để làm là sử dụng $ cond
nhà điều hành:
Truy vấn:
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 ] }
}
}
])
Kiểm tra: mongoplayground
Giải thích:
Vì vậy, cú pháp của $ slice
là {$ slice:[
từ đó nếu bạn chuyển một giá trị lớn hơn kích thước của mảng cho
thì bạn sẽ nhận được một mảng trống trong phản hồi.
Ở đây chúng tôi đang sử dụng $ cond
để gửi có điều kiện một trong hai giá trị của inputPosition
hoặc giá trị của maxNumber
thành
. Ngoài ra, tôi có một giá trị được mã hóa cứng là maxNumber
thành 1000
nhưng nói chung, tất cả phụ thuộc vào sự lựa chọn của bạn - Bạn có thể sử dụng một số nhỏ hơn, điều đó không quan trọng, số đó phải là giá trị lớn hơn kích thước mảng của bạn, Bạn cũng có thể kích thước của mảng + 1 nhưng thay vì thực hiện thao tác đó nếu bạn cho rằng mảng của mình luôn nhỏ hơn 1000 thì hãy sử dụng trực tiếp
1000
.
Tham khảo: $ slice