Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der $addToSet-Operator fügt einem Array Elemente hinzu, wenn sie noch nicht vorhanden sind, und stellt gleichzeitig die Eindeutigkeit von Elementen innerhalb der Gruppe sicher.
Syntax
{
$addToSet: { <field1>: <value1> }
}
Die Parameter
| Parameter | Description |
|---|---|
<field1> |
Das Feld, dem Sie Elemente hinzufügen möchten. |
<value1> |
Der Wert, der dem Array hinzugefügt werden soll. |
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 eines neuen Tags zum tag Array
Diese Abfrage fügt dem Array von Tags ein neues Tag hinzu, führen Sie eine Abfrage mit dem operator $addToSet aus, um den neuen Wert hinzuzufügen.
db.stores.updateOne({
_id: "0fcc0bf0-ed18-4ab8-b558-9848e18058f4"
}, {
$addToSet: {
tag: "#ShopLocal"
}
})
Diese Abfrage gibt das folgende Ergebnis zurück:
[
{
"acknowledged": true,
"insertedId": null,
"matchedCount": "1",
"modifiedCount": "0",
"upsertedCount": 0
}
]
Beispiel 2: Hinzufügen eines neuen Werbeereignisses promotionEvents zum Array
Diese Abfrage fügt dem promotionEvents Array ein neues Ereignis hinzu, führen Sie eine Abfrage mit dem $addToSet-Operator mit dem neuen Heraufstufungsobjekt aus, das hinzugefügt werden soll.
db.stores.updateOne({
_id: "0fcc0bf0-ed18-4ab8-b558-9848e18058f4"
}, {
$addToSet: {
promotionEvents: {
eventName: "Summer Sale",
promotionalDates: {
startDate: {
Year: 2024,
Month: 6,
Day: 1
},
endDate: {
Year: 2024,
Month: 6,
Day: 15
}
},
discounts: [{
categoryName: "DJ Speakers",
discountPercentage: 20
}]
}
}
})
Diese Abfrage gibt das folgende Ergebnis zurück:
[
{
"acknowledged": true,
"insertedId": null,
"matchedCount": "1",
"modifiedCount": "1",
"upsertedCount": 0
}
]
Beispiel 3 : Verwenden von $addToSet mit $setWindowOperators
Um die Liste der Städte für jeden Store innerhalb des Unternehmens „First Up Consultants“ abzurufen, führen Sie eine Abfrage aus, um die Stores zunächst nach dem Unternehmen zu partitionieren. Verwenden Sie dann den $addToSet-Operator, um die verschiedenen Städte für jedes Geschäft innerhalb der Partition hinzuzufügen.
db.stores.aggregate([{
$match: {
company: {
$in: ["First Up Consultants"]
}
}
}, {
$setWindowFields: {
partitionBy: "$company",
sortBy: {
"sales.totalSales": -1
},
output: {
citiesForCompany: {
$push: "$city",
window: {
documents: ["unbounded", "current"]
}
}
}
}
}, {
$project: {
company: 1,
name: 1,
citiesForCompany: 1
}
}])
Die ersten beiden Ergebnisse, die von dieser Abfrage zurückgegeben werden, sind:
[
{
"_id": "a1713bed-4c8b-46e7-bb68-259045dffdb4",
"name": "First Up Consultants | Bed and Bath Collection - Jaskolskiside",
"company": "First Up Consultants",
"citiesForCompany": [
"South Thelma",
"South Carmenview",
"Port Antone",
"Charlotteville",
"South Lenorafort",
"Jaskolskiside"
]
},
{
"_id": "6b8585ab-4357-4da7-8625-f6a1cd5796c5",
"name": "First Up Consultants | Computer Depot - West Zack",
"company": "First Up Consultants",
"citiesForCompany": [
"South Thelma",
"South Carmenview",
"Port Antone",
"Charlotteville",
"South Lenorafort",
"Jaskolskiside",
"West Zack"
]
}
]