Freigeben über


$push

Der $push Operator wird verwendet, um einem Array innerhalb eines Dokuments einen angegebenen Wert hinzuzufügen. Der $push-Operator fügt einem vorhandenen Array neue Elemente hinzu, ohne dass sich dies auf andere Elemente im Array auswirkt.

Syntax

db.collection.update({
    < query >
}, {
    $push: {
        < field >: < value >
    }
}, {
    < options >
})

Die Parameter

Parameter Description
<query> Die Auswahlkriterien für die zu aktualisierenden Dokumente.
<field> Das Arrayfeld, an das der Wert angefügt wird.
<value> Der Wert, der an das Arrayfeld angefügt werden soll.
<options> Wahlfrei. Zusätzliche Optionen für den Updatevorgang.

Examples

Betrachten Sie dieses Beispieldokument aus der Stores-Sammlung.

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

Beispiel 1 : Hinzufügen einer neuen Vertriebskategorie

Wenn Sie dem Array "salesByCategory" eine neue Vertriebskategorie hinzufügen möchten, führen Sie eine Abfrage mithilfe des $push Operators für das Feld mit einem neuen Sales-Objekt mit dem Namen der Kategorie und dessen Verkaufsvolumen aus.

db.stores.update({
    _id: "0fcc0bf0-ed18-4ab8-b558-9848e18058f4"
}, {
    $push: {
        "sales.salesByCategory": {
            categoryName: "Wine Accessories",
            totalSales: 1000.00
        }
    }
})

Diese Abfrage gibt das folgende Ergebnis zurück:

[
  {
    "acknowledged": true,
    "insertedId": null,
    "matchedCount": "1",
    "modifiedCount": "1",
    "upsertedCount": 0
  }
]

Beispiel 2 : Verwenden von $push mit $setWindowFields

Um die unterschiedlichen Verkaufsmengen in allen Filialen unter dem Unternehmen "First Up Consultants" abzurufen, führen Sie zunächst eine Abfrage zur Partitionierung von Stores innerhalb des Unternehmens aus. Verwenden Sie dann den $push-Operator, um eine Liste der Verkäufe vom ersten bis zum aktuellen Geschäft innerhalb der Partition zu erstellen.

db.stores.aggregate([{
    $match: {
        company: {
            $in: ["First Up Consultants"]
        }
    }
}, {
    $setWindowFields: {
        partitionBy: "$company",
        sortBy: {
            "sales.totalSales": -1
        },
        output: {
            salesByStore: {
                $push: "$sales.totalSales",
                window: {
                    documents: ["unbounded", "current"]
                }
            }
        }
    }
}, {
    $project: {
        company: 1,
        salesByStore: 1
    }
}])

Die ersten drei Ergebnisse, die von dieser Abfrage zurückgegeben werden, sind:

[
    {
        "_id": "a0386810-b6f8-4b05-9d60-e536fb2b0026",
        "company": "First Up Consultants",
        "salesByStore": [
            327583
        ]
    },
    {
        "_id": "ad8af64a-d5bb-4162-9bb6-e5104126566d",
        "company": "First Up Consultants",
        "salesByStore": [
            327583,
            288582
        ]
    },
    {
        "_id": "39acb3aa-f350-41cb-9279-9e34c004415a",
        "company": "First Up Consultants",
        "salesByStore": [
            327583,
            288582,
            279183
        ]
    }
]