Toán tử $slice trong projection của find() cho phép lấy một đoạn (subset) của mảng, bao gồm N phần tử cuối với số âm.
Dữ liệu mẫu
> db.demo173.insertOne({"ListOfValues":[10,40,100,560,700,900]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e383a4f9e4f06af551997e4") }
Truy vấn lấy 2 phần tử cuối
> db.demo173.find({}, { "ListOfValues": { "$slice": -2 } } );
Kết quả
{ "_id" : ObjectId("5e383a4f9e4f06af551997e4"), "ListOfValues" : [ 700, 900 ] }
Cú pháp $slice trong projection:
| Giá trị | Kết quả |
|---|---|
N (số dương) | N phần tử đầu tiên |
-N (số âm) | N phần tử cuối cùng |
[skip, limit] | Bỏ qua skip phần tử, lấy limit phần tử |
Ví dụ:
{arr: {$slice: 3}}→ 3 phần tử đầu{arr: {$slice: -3}}→ 3 phần tử cuối{arr: {$slice: [2, 3]}}→ Bỏ 2, lấy 3 (phần tử 3,4,5){arr: {$slice: [-5, 2]}}→ Từ cuối lùi 5, lấy 2
Lưu ý: $slice trong find() chỉ dùng cho projection. Trong aggregate, dùng stage $project với $slice hoặc $arrayElemAt.