Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

วิธีย้ายอาร์เรย์เอกสารฝังขึ้นเป็นฟิลด์หลักและเปลี่ยน Key/Value ด้วย Aggregation Pipeline

ใช้ $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 }