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

Kết hợp hai mảng thành mảng object với $zip MongoDB

Transpose mảng với $zip và $map trong aggregation

Toán tử $zip ghép các mảng theo vị trí (index), tạo mảng mới chứa các cặp giá trị. Kết hợp $map để reshape thành object.

Dữ liệu điểm số

> db.demo339.insertOne({Id: 101, Score1: ["98", "56"], Score2: [67, 89]});

Pipeline zip và reshape

> db.demo339.aggregate([
    {
        $project: {
            "AllArrayObject": {
                $map: {
                    input: {
                        $objectToArray: {
                            $arrayToObject: {
                                $zip: {
                                    inputs: ["$Score1", "$Score2"]
                                }
                            }
                        }
                    },
                    as: "el",
                    in: { "Score1": "$$el.k", "Score2": "$$el.v" }
                }
            }
        }
    }
]);

Kết quả

{
    "_id": ObjectId("..."),
    "AllArrayObject": [
        { "Score1": "98", "Score2": 67 },
        { "Score1": "56", "Score2": 89 }
    ]
}

Luồng xử lý: $zip tạo [[k,v],...] → $arrayToObject tạo {k:v,...} → $objectToArray tạo [{k,v},...] → $map reshape.

Lưu ý: Các mảng phải cùng độ dài. Từ MongoDB 5.0, có thể dùng $zip: { inputs: [...], useLongestLength: true }.