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

Chuyển mảng ObjectId thành mảng embedded document MongoDB

Reshape mảng với $map và $out trong aggregation

Sử dụng $addFields với $map để biến đổi cấu trúc mảng, sau đó $out ghi đè collection.

Dữ liệu ban đầu

> db.demo343.insertOne({
    _id: 101,
    UserName: "Chris",
    details: [{ "Name": "John" }, { "Name": "David" }]
});

Pipeline chuyển đổi

> db.demo343.aggregate([
    {
        $addFields: {
            details: {
                $map: {
                    input: "$details",
                    in: { Name: "$$this" }
                }
            }
        }
    },
    { $out: "demo343" }
]);

Kết quả sau $out

{
    "_id": 101,
    "UserName": "Chris",
    "details": [
        { "Name": { "Name": "John" } },
        { "Name": { "Name": "David" } }
    ]
}

⚠️ Lưu ý quan trọng: Pipeline này tạo cấu trúc lồng nhau {Name: {Name: "John"}} - có thể không phải ý định. Để giữ cấu trúc phẳng, dùng:

in: "$$this"  // Giữ nguyên object
// hoặc
in: { Name: "$$this.Name", ... }  // Chọn trường cụ thể

$out ghi kết quả vào collection, thay thế hoàn toàn collection cũ.