Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Di chuyển mảng tài liệu nhúng lên cấp cha và đổi key/value với Aggregation Pipeline

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.