ใช้ $replaceRoot และ $arrayToObject
$replaceRoot แทนที่เอกสารต้นทางด้วยเอกสารใหม่ รวมกับ $mergeObjects และ $arrayToObject เพื่อแปลงอาร์เรย์เป็นอ็อบเจกต์ key-value
สร้างข้อมูลตัวอย่าง
> db.demo733.insertOne({
"SubjectDetails": [
{ SubjectName:"MongoDB", "Marks":85 },
{ SubjectName:"MySQL", "Marks":90 },
{ SubjectName:"PL/SQL", "Marks":98 }
]
});
แสดงข้อมูลทั้งหมด
> db.demo733.find();
ผลลัพธ์:
{ "_id" : ObjectId("5eac6e6156e85a39df5f6342"), "SubjectDetails" : [ { "SubjectName" : "MongoDB", "Marks" : 85 }, { "SubjectName" : "MySQL", "Marks" : 90 }, { "SubjectName" : "PL/SQL", "Marks" : 98 } ] }
คิวรีแปลงอาร์เรย์ SubjectDetails เป็นฟิลด์หลัก
> db.demo733.aggregate([
{
$replaceRoot: {
newRoot: {
$mergeObjects: [
{ _id: "$_id" },
{ $arrayToObject: { $map: { input: "$SubjectDetails", in: [ "$$this.SubjectName", "$$this.Marks" ] } } }
]
}
}
}
]).pretty()
ผลลัพธ์: ฟิลด์กลายเป็น key และ Marks เป็น value
{ "_id" : ObjectId("5eac6e6156e85a39df5f6342"), "MongoDB" : 85, "MySQL" : 90, "PL/SQL" : 98 }