Reshape mảng với $map và $out trong aggregation
Sử dụng $addFields với $map để biến đổi cấu trúc mảng, sau đó $out ghi đè collection.
Dữ liệu ban đầu
> db.demo343.insertOne({
_id: 101,
UserName: "Chris",
details: [{ "Name": "John" }, { "Name": "David" }]
});
Pipeline chuyển đổi
> db.demo343.aggregate([
{
$addFields: {
details: {
$map: {
input: "$details",
in: { Name: "$$this" }
}
}
}
},
{ $out: "demo343" }
]);
Kết quả sau $out
{
"_id": 101,
"UserName": "Chris",
"details": [
{ "Name": { "Name": "John" } },
{ "Name": { "Name": "David" } }
]
}
⚠️ Lưu ý quan trọng: Pipeline này tạo cấu trúc lồng nhau {Name: {Name: "John"}} - có thể không phải ý định. Để giữ cấu trúc phẳng, dùng:
in: "$$this" // Giữ nguyên object
// hoặc
in: { Name: "$$this.Name", ... } // Chọn trường cụ thể
$out ghi kết quả vào collection, thay thế hoàn toàn collection cũ.