Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs Menu

$mergeObjects (función de ventana)

$mergeObjects

Nuevo en la versión 8.3.

Devuelve un documento creado mediante la fusión de los documentos de entrada de una ventana.

Nota

Desambiguación

Esta página describe $mergeObjects cuando se utiliza como función de ventana.

También puedes usar $mergeObjects en estos otros contextos:

{
$setWindowFields: {
output: {
<outputField>: {
$mergeObjects: <document>,
window: {
<documents|range>: [ "unbounded", <upper> ]
}
}
}
}
}

Nota

La opción sortBy en $setWindowFields es opcional cuando el límite superior de la ventana es "unbounded" o cuando se omite window. sortBy es obligatorio cuando el límite superior de la ventana no es "unbounded", como por ejemplo "current".

Cuando se omite sortBy, no se garantiza el orden en que $mergeObjects resuelve los nombres de campo conflictivos.

Campo
Tipo
Necesidad
Descripción

<document>

expresión

Requerido

Un nombre de campo o expresión que se evalúa como un documento. $percentile combina los valores de los documentos de todos los documentos en la ventana.

window

Documento

Opcional

Especifica el rango de documentos sobre el que opera $percentile. El límite inferior debe ser "unbounded". Si se omite, el rango incluye todos los documentos de la partición.

$mergeObjects Solo admite ventanas no extraíbles, lo que significa que el límite inferior es "unbounded". Si especifica una ventana cuyo límite inferior no sea "unbounded", la operación devuelve un error.

$mergeObjects Ignora los valores de entrada null. Si todos los valores de entrada son null, $mergeObjects devuelve un documento vacío { }.

$mergeObjects Sobrescribe los valores de los campos al fusionar los documentos. Si varios documentos de entrada contienen el mismo nombre de campo, la salida contendrá el valor del último documento de entrada que contenga el campo conflictivo.

Cree una colección productUpdates:

db.productUpdates.insertMany( [
{ _id: 1, product: "gadget", date: ISODate("2024-01-01"), specs: { color: "blue" } },
{ _id: 2, product: "gadget", date: ISODate("2024-01-02"), specs: { size: "medium" } },
{ _id: 3, product: "gadget", date: ISODate("2024-01-03"), specs: { weight: 0.5 } },
{ _id: 4, product: "widget", date: ISODate("2024-01-01"), specs: { color: "red" } },
{ _id: 5, product: "widget", date: ISODate("2024-01-02"), specs: { material: "plastic" } }
] )

Cada documento representa una actualización del producto que añade nuevos campos de especificación. Dado que cada actualización aporta nombres de campo diferentes al subdocumento specs, $mergeObjects puede acumular un perfil de especificación completo a medida que se expande la ventana.

La siguiente canalización utiliza $mergeObjects en $setWindowFields para devolver una lista de especificaciones de producto que se actualiza de forma acumulativa a medida que se añaden nuevas especificaciones a la ventana. Para cada documento, cumulativeSpecs contiene las especificaciones combinadas de todas las actualizaciones hasta el documento actual inclusive:

db.productUpdates.aggregate( [
{
$setWindowFields: {
partitionBy: "$product",
sortBy: { date: 1 },
output: {
cumulativeSpecs: {
$mergeObjects: "$specs",
window: {
documents: [ "unbounded", "current" ]
}
}
}
}
},
{ $sort: { product: 1, date: 1 } },
{ $project: { _id: 0, product: 1, date: 1, specs: 1, cumulativeSpecs: 1 } }
] )

En el pipeline anterior:

  • $setWindowFields particiona los documentos por product y los ordena por date en orden ascendente.

  • $mergeObjects utiliza una ventana de unbounded a current para fusionar todos los documentos specs desde el principio de cada partición hasta el documento actual, produciendo una especificación acumulada continua.

  • $sort ordena los resultados finales por product y date en orden ascendente.

Califique esta página