Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La $merge etapa en una canalización de agregación se usa para escribir los resultados de la consulta de agregación en una colección especificada. Esta fase es especialmente útil para tareas como actualizar o insertar documentos en una colección de destino en función de la salida de una operación de agregación. Ayuda a simplificar los flujos de trabajo mediante la combinación de la transformación de datos y la persistencia de datos en una sola operación.
Sintaxis
{
$merge: {
into: <collection>,
on: <field or fields>,
whenMatched: <action>,
whenNotMatched: <action>
}
}
Parámetros
| Parámetro | Descripción |
|---|---|
into |
Especifica la colección de destino donde se escribirán los resultados de agregación. |
on |
Especifica los campos para identificar los documentos coincidentes en la colección de destino. |
whenMatched |
Especifica la acción que se debe realizar cuando se encuentra un documento coincidente. Las opciones incluyen merge, replace, keepExisting, failo una canalización personalizada. |
whenNotMatched |
Especifica la acción que se debe realizar cuando no se encuentra ningún documento coincidente. Las opciones incluyen insert o discard. |
Ejemplos
Considere este documento de ejemplo de la colección de tiendas.
{
"_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"
]
}
Ejemplo 1: Combinar datos en una colección
Esta consulta agrega documentos y escribe los resultados en una colección denominada salesSummary, actualizando los documentos existentes donde coincide _id e inserta nuevos documentos de lo contrario.
db.sales.aggregate([
{
$group: {
_id: "$sales.salesByCategory.categoryName",
totalSales: { $sum: "$sales.salesByCategory.totalSales" }
}
},
{
$merge: {
into: "salesSummary",
on: "_id",
whenMatched: "merge",
whenNotMatched: "insert"
}
}
])
Ejemplo 2: Reemplazar documentos de la colección de destino
En este ejemplo, los documentos de la colección promotionEventsSummary se reemplazan basándose en el campo _id.
db.promotionEvents.aggregate([
{
$project: {
_id: "$eventName",
startDate: "$promotionalDates.startDate",
endDate: "$promotionalDates.endDate",
totalDiscounts: { $size: "$discounts" }
}
},
{
$merge: {
into: "promotionEventsSummary",
on: "_id",
whenMatched: "replace",
whenNotMatched: "insert"
}
}
])
Contenido relacionado
- Revise las opciones para migrar de MongoDB a Azure Cosmos DB para MongoDB (núcleo virtual).
- Obtenga más información sobre la compatibilidad de características con MongoDB.