Để chuyển đổi một mảng các đối tượng thành một bản đồ (object/map) trong MongoDB, bạn có thể kết hợp $arrayToObject với $map trong Pipeline Aggregation. Mỗi phần tử trong mảng sẽ trở thành một cặp key-value trong object kết quả, trong đó key thường lấy từ một trường duy nhất của phần tử (ví dụ: Name).
1. Tạo bộ sưu tập và chèn dữ liệu mẫu
> db.demo398.insertOne({
"details": [
{
"Name": "Chris",
"Age": 22
}
]
});
{
"acknowledged": true,
"insertedId": ObjectId("5e5e8cedfac4d418a017856c")
}
2. Xem dữ liệu ban đầu
> db.demo398.find();
Kết quả:
{ "_id": ObjectId("5e5e8cedfac4d418a017856c"), "details": [{ "Name": "Chris", "Age": 22 }] }
3. Pipeline Aggregation để chuyển mảng thành object
> db.demo398.aggregate([
{
$addFields: {
"details": {
$arrayToObject: {
$map: {
input: "$details",
as: "out",
in: {
k: "$$out.Name",
v: "$$out"
}
}
}
}
}
}
])
4. Kết quả
{ "_id": ObjectId("5e5e8cedfac4d418a017856c"), "details": { "Chris": { "Name": "Chris", "Age": 22 } } }
Giải thích các stage:
$map: Duyệt qua từng phần tử trong mảngdetails, tạo object mới vớik(key) làNamevàv(value) là toàn bộ object gốc.$arrayToObject: Chuyển mảng các cặp{k, v}thành một object đơn lẻ.$addFields: Ghi đè trườngdetailsbằng kết quả mới.
Ứng dụng: Kỹ thuật này thường dùng để re-structure dữ liệu cho dễ truy vấn theo key, hoặc chuẩn bị dữ liệu cho frontend.