Bagikan melalui


$mergeObjects

Operator $mergeObjects menggabungkan beberapa dokumen ke dalam satu dokumen. Operasi mergeObjects digunakan dalam alur agregasi untuk menggabungkan bidang dari dokumen yang berbeda atau menambahkan satu atau beberapa bidang ke dokumen yang sudah ada. Operator menimpa bidang dalam dokumen target dengan bidang dari dokumen sumber saat konflik terjadi.

Syntax

{
  $mergeObjects: [ < document1 > , < document2 > , ...]
}

Parameter-parameternya

Pengaturan Description
document1, document2 Dokumen yang akan digabungkan. Dokumen dapat ditentukan sebagai jalur bidang, subdokumen, atau konstanta.

Examples

Pertimbangkan dokumen sampel ini dari koleksi toko.

{
    "_id": "0fcc0bf0-ed18-4ab8-b558-9848e18058f4",
    "name": "First Up Consultants | Beverage Shop - Satterfieldmouth",
    "location": {
        "lat": -89.2384,
        "lon": -46.4012
    },
    "staff": {
        "totalStaff": {
            "fullTime": 8,
            "partTime": 20
        }
    },
    "sales": {
        "totalSales": 75670,
        "salesByCategory": [
            {
                "categoryName": "Wine Accessories",
                "totalSales": 34440
            },
            {
                "categoryName": "Bitters",
                "totalSales": 39496
            },
            {
                "categoryName": "Rum",
                "totalSales": 1734
            }
        ]
    },
    "promotionEvents": [
        {
            "eventName": "Unbeatable Bargain Bash",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 6,
                    "Day": 23
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 7,
                    "Day": 2
                }
            },
            "discounts": [
                {
                    "categoryName": "Whiskey",
                    "discountPercentage": 7
                },
                {
                    "categoryName": "Bitters",
                    "discountPercentage": 15
                },
                {
                    "categoryName": "Brandy",
                    "discountPercentage": 8
                },
                {
                    "categoryName": "Sports Drinks",
                    "discountPercentage": 22
                },
                {
                    "categoryName": "Vodka",
                    "discountPercentage": 19
                }
            ]
        },
        {
            "eventName": "Steal of a Deal Days",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 9,
                    "Day": 21
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 9,
                    "Day": 29
                }
            },
            "discounts": [
                {
                    "categoryName": "Organic Wine",
                    "discountPercentage": 19
                },
                {
                    "categoryName": "White Wine",
                    "discountPercentage": 20
                },
                {
                    "categoryName": "Sparkling Wine",
                    "discountPercentage": 19
                },
                {
                    "categoryName": "Whiskey",
                    "discountPercentage": 17
                },
                {
                    "categoryName": "Vodka",
                    "discountPercentage": 23
                }
            ]
        }
    ]
}

Contoh 1 - Menggabungkan dokumen sebagai akumulator untuk mengelompokkan dokumen menurut subdokumen penjualan

Kueri menggabungkan semua subdokumen penjualan per kota untuk perusahaan tertentu.

db.stores.aggregate([
  {
    $match: {
      company: "Fourth Coffee"
    }
  },
  {
    $group: {
      _id: "$city",
      mergedSales: {
        $mergeObjects: "$sales"
      }
    }
  },
  {
    $limit: 2   // returns only the first 3 grouped cities
  }
])

Dua hasil pertama yang dikembalikan oleh kueri ini adalah:

[
  {
      "_id": "Jalonborough",
      "mergedSales": {
          "totalSales": 45747,
          "salesByCategory": [
              {
                  "categoryName": "Bucket Bags",
                  "totalSales": 45747
              }
          ]
      }
  },
  {
      "_id": "Port Vladimir",
      "mergedSales": {
          "totalSales": 32000,
          "salesByCategory": [
              {
                  "categoryName": "DJ Speakers",
                  "totalSales": 24989
              },
              {
                  "categoryName": "DJ Cables",
                  "totalSales": 7011
              }
          ]
      }
  }
]