Toán tử $unwind trong Aggregation Pipeline "phẳng hóa" mảng: tạo document riêng cho mỗi phần tử mảng, giữ nguyên các trường khác.
Ví dụ minh họa
Tạo collection unwindOperatorDemo:
> db.unwindOperatorDemo.insertOne({"TenSinhVien": "Larry", "TuoiSinhVien": 23, "MonHoc": ["C", "C++", "Java", "MongoDB"]});
Document gốc: 1 document, mảng MonHoc 4 phần tử.
Áp dụng $unwind
> db.unwindOperatorDemo.aggregate([
{$project: {TenSinhVien: 1, TuoiSinhVien: 1, MonHoc: 1}},
{$unwind: "$MonHoc"}
]).pretty();
Kết quả: 4 document, mỗi document có 1 môn học:
{ "TenSinhVien": "Larry", "TuoiSinhVien": 23, "MonHoc": "C" }
{ "TenSinhVien": "Larry", "TuoiSinhVien": 23, "MonHoc": "C++" }
{ "TenSinhVien": "Larry", "TuoiSinhVien": 23, "MonHoc": "Java" }
{ "TenSinhVien": "Larry", "TuoiSinhVien": 23, "MonHoc": "MongoDB" }
Tùy chọn nâng cao
preserveNullAndEmptyArrays: true- Giữ document nếu mảng rỗng/nullincludeArrayIndex: "tenTruong"- Thêm trường chứa chỉ mục gốc
Ứng dụng: Phân tích dữ liệu mảng, join với collection khác, đếm phần tử, lọc phần tử mảng.