Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’étape $merge d’un pipeline d’agrégation est utilisée pour écrire les résultats de la requête d’agrégation dans une collection spécifiée. Cette étape est particulièrement utile pour les tâches telles que la mise à jour ou l’insertion de documents dans une collection cible en fonction de la sortie d’une opération d’agrégation. Il permet de simplifier les flux de travail en combinant la transformation des données et la persistance des données dans une seule opération.
Syntaxe
{
$merge: {
into: <collection>,
on: <field or fields>,
whenMatched: <action>,
whenNotMatched: <action>
}
}
Paramètres
| Paramètre | Descriptif |
|---|---|
into |
Spécifie la collection cible dans laquelle les résultats d’agrégation seront écrits. |
on |
Spécifie le ou les champs pour identifier les documents correspondants dans la collection cible. |
whenMatched |
Spécifie l’action à entreprendre lorsqu’un document correspondant est trouvé. Les options incluent merge, , replacekeepExisting, failou un pipeline personnalisé. |
whenNotMatched |
Spécifie l’action à entreprendre lorsqu’aucun document correspondant n’est trouvé. Les options incluent insert ou discard. |
Examples
Considérez cet exemple de document de la collection des magasins.
{
"_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
"name": "Lakeshore Retail | DJ Equipment Stop - Port Cecile",
"location": {
"lat": 60.1441,
"lon": -141.5012
},
"staff": {
"totalStaff": {
"fullTime": 2,
"partTime": 0
}
},
"sales": {
"salesByCategory": [
{
"categoryName": "DJ Headphones",
"totalSales": 35921
}
],
"fullSales": 3700
},
"promotionEvents": [
{
"eventName": "Bargain Blitz Days",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 3,
"Day": 11
},
"endDate": {
"Year": 2024,
"Month": 2,
"Day": 18
}
},
"discounts": [
{
"categoryName": "DJ Turntables",
"discountPercentage": 18
},
{
"categoryName": "DJ Mixers",
"discountPercentage": 15
}
]
}
],
"tag": [
"#ShopLocal",
"#SeasonalSale",
"#FreeShipping",
"#MembershipDeals"
]
}
Exemple 1 : Fusionner des données dans une collection
Cette requête agrège les documents et écrit les résultats dans une collection nommée salesSummary, mettant à jour les documents existants où les _id correspondances et l’insertion de nouveaux documents dans le cas contraire.
db.sales.aggregate([
{
$group: {
_id: "$sales.salesByCategory.categoryName",
totalSales: { $sum: "$sales.salesByCategory.totalSales" }
}
},
{
$merge: {
into: "salesSummary",
on: "_id",
whenMatched: "merge",
whenNotMatched: "insert"
}
}
])
Exemple 2 : Remplacer des documents dans la collection cible
Cet exemple remplace les documents de la promotionEventsSummary collection en fonction du _id champ.
db.promotionEvents.aggregate([
{
$project: {
_id: "$eventName",
startDate: "$promotionalDates.startDate",
endDate: "$promotionalDates.endDate",
totalDiscounts: { $size: "$discounts" }
}
},
{
$merge: {
into: "promotionEventsSummary",
on: "_id",
whenMatched: "replace",
whenNotMatched: "insert"
}
}
])