Sử dụng $replaceRoot, $mergeObjects, $arrayToObject
Kỹ thuật nâng cao biến đổi cấu trúc tài liệu: chuyển mảng đối tượng thành các cặp key-value tại cấp gốc.
Dữ liệu mẫu
> db.demo733.insertOne({
SubjectDetails: [
{ SubjectName: "MongoDB", Marks: 85 },
{ SubjectName: "MySQL", Marks: 90 },
{ SubjectName: "PL/SQL", Marks: 98 }
]
});
Truy vấn biến đổi
db.demo733.aggregate([
{
$replaceRoot: {
newRoot: {
$mergeObjects: [
{ _id: "$_id" },
{
$arrayToObject: {
$map: {
input: "$SubjectDetails",
in: [ "$$this.SubjectName", "$$this.Marks" ]
}
}
}
]
}
}
}
]).pretty()
Kết quả
{
"_id": ObjectId("5eac6e6156e85a39df5f6342"),
"MongoDB": 85,
"MySQL": 90,
"PL/SQL": 98
}
Mảng SubjectDetails biến thành các trường riêng biệt với tên môn học làm key, điểm làm value.