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

Nối mảng đa chiều với $concatArrays và $reduce MongoDB

Làm phẳng mảng lồng nhau (flatten) trong aggregation

Kết hợp $reduce và $concatArrays để gộp mảng 2 chiều thành mảng 1 chiều.

Dữ liệu mảng lồng nhau

> db.demo338.insertOne({
    "Name": "Chris",
    "Marks1": [[56, 67, 45], [67, 89, 90, 91]]
});

Pipeline flatten mảng

> db.demo338.aggregate([
    {
        $project: {
            "Marks": {
                $reduce: {
                    input: "$Marks1",
                    initialValue: [],
                    in: { $concatArrays: ["$$this", "$$value"] }
                }
            }
        }
    }
]);

Kết quả

{ "_id": ObjectId("..."), "Marks": [67, 89, 90, 91, 56, 67, 45] }

Giải thích $reduce:

  • input: Mảng cần reduce (Marks1 - mảng các mảng)
  • initialValue: Giá trị khởi tạo (mảng rỗng [])
  • in: Biểu thức tích lũy - nối mảng hiện tại ($$this) vào accumulator ($$value)

Thứ tự: Kết quả theo thứ tự duyệt: mảng con đầu tiên nối vào rỗng, mảng con thứ 2 nối vào kết quả trước...