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

Truy vấn MongoDB chuyển mảng thành bản đồ (map) tài liệu với n thuộc tính

Để chuyển đổi một mảng các đối tượng thành một bản đồ (object/map) trong MongoDB, bạn có thể kết hợp $arrayToObject với $map trong Pipeline Aggregation. Mỗi phần tử trong mảng sẽ trở thành một cặp key-value trong object kết quả, trong đó key thường lấy từ một trường duy nhất của phần tử (ví dụ: Name).

1. Tạo bộ sưu tập và chèn dữ liệu mẫu

> db.demo398.insertOne({
    "details": [
        {
            "Name": "Chris",
            "Age": 22
        }
    ]
});
{
    "acknowledged": true,
    "insertedId": ObjectId("5e5e8cedfac4d418a017856c")
}

2. Xem dữ liệu ban đầu

> db.demo398.find();

Kết quả:

{ "_id": ObjectId("5e5e8cedfac4d418a017856c"), "details": [{ "Name": "Chris", "Age": 22 }] }

3. Pipeline Aggregation để chuyển mảng thành object

> db.demo398.aggregate([
    {
        $addFields: {
            "details": {
                $arrayToObject: {
                    $map: {
                        input: "$details",
                        as: "out",
                        in: {
                            k: "$$out.Name",
                            v: "$$out"
                        }
                    }
                }
            }
        }
    }
])

4. Kết quả

{ "_id": ObjectId("5e5e8cedfac4d418a017856c"), "details": { "Chris": { "Name": "Chris", "Age": 22 } } }

Giải thích các stage:

  • $map: Duyệt qua từng phần tử trong mảng details, tạo object mới với k (key) là Name và v (value) là toàn bộ object gốc.
  • $arrayToObject: Chuyển mảng các cặp {k, v} thành một object đơn lẻ.
  • $addFields: Ghi đè trường details bằng kết quả mới.

Ứng dụng: Kỹ thuật này thường dùng để re-structure dữ liệu cho dễ truy vấn theo key, hoặc chuẩn bị dữ liệu cho frontend.