Delen via


$mergeObjects

De $mergeObjects operator combineert meerdere documenten in één document. De bewerking mergeObjects wordt gebruikt in aggregatiepijplijnen om velden uit verschillende documenten samen te voegen of een of meer velden toe te voegen aan een bestaand document. De operator overschrijft velden in het doeldocument met velden uit het brondocument wanneer er conflicten optreden.

Syntaxis

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

Parameterwaarden

Kenmerk Description
document1, document2 De documenten die moeten worden samengevoegd. De documenten kunnen worden opgegeven als veldpaden, subdocumenten of constanten.

Voorbeelden

Bekijk dit voorbeelddocument uit de winkelverzameling.

{
    "_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
                }
            ]
        }
    ]
}

Voorbeeld 1: documenten samenvoegen als een accumulator om documenten te groeperen op basis van het verkoopsubdocument

Met de query worden alle verkoopsubdocumenten per stad samengevoegd voor een specifiek bedrijf.

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

De eerste twee resultaten die door deze query worden geretourneerd, zijn:

[
  {
      "_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
              }
          ]
      }
  }
]