Toán tử $slice trong MongoDB cho phép bạn trích xuất một tập con các phần tử từ mảng bằng cách chỉ định vị trí bắt đầu và số lượng phần tử cần lấy (phạm vi). Điều này rất hữu ích khi làm việc với mảng lớn và chỉ cần một đoạn dữ liệu nhất định.
1. Tạo bộ sưu tập và chèn dữ liệu mẫu
> db.demo54.insertOne({
"ListOfValues": [100, 2030, 5353, 7364, 635, 535, 524, 423, 2434, 1323, 799874, 90]
});
{
"acknowledged": true,
"insertedId": ObjectId("5e27151ecfb11e5c34d89914")
}
2. Xem dữ liệu ban đầu
> db.demo54.find().pretty();
Kết quả:
{
"_id": ObjectId("5e27151ecfb11e5c34d89914"),
"ListOfValues": [
100, 2030, 5353, 7364, 635, 535, 524, 423, 2434, 1323, 799874, 90
]
}
3. Sử dụng $slice với phạm vi [bắt đầu, số lượng]
Cú pháp: { $slice: [vị_trí_bắt_đầu, số_lượng_phần_tử] }
> db.demo54.find({}, { "ListOfValues": { $slice: [5, 3] } }).pretty();
Ý nghĩa: Bắt đầu từ chỉ số 5 (phần tử thứ 6, vì chỉ số từ 0) và lấy 3 phần tử.
4. Kết quả
{
"_id": ObjectId("5e27151ecfb11e5c34d89914"),
"ListOfValues": [ 535, 524, 423 ]
}
Lưu ý:
- Vị trí bắt đầu tính từ 0.
- Số lượng âm (
-n) sẽ lấynphần tử cuối mảng. - Có thể dùng trong projection của
find()hoặc trong$projectcủa aggregation.