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

$setUnion (función de ventana)

$setUnion

Devuelve una matriz con los elementos únicos de los valores de la matriz en una ventana.

Nuevo en la versión 8.1.

Nota

Desambiguación

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

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

  • $setUnion (accumulator), que devuelve una única matriz con los elementos únicos de los valores de la matriz en un grupo de documentos.

  • $setUnion (expression), que combina dos o más matrices en una única matriz de elementos únicos.

{
$setWindowFields: {
...
output: {
<field>: {
$setUnion: <array field>
}
}
}
}

$setUnion Realiza operaciones de conjuntos en matrices, tratándolas como conjuntos. Si una matriz contiene entradas duplicadas, $setUnion ignora las entradas duplicadas. $setUnion ignora el orden de los elementos.

$setUnion filtra los duplicados en su resultado para producir un arreglo que contenga solo entradas únicas. El orden de los elementos en el arreglo de salida no está especificado.

Si un conjunto contiene un elemento de arreglo anidado, $setUnion no desciende en el arreglo anidado, sino que evalúa el arreglo a nivel superior.

Para ver cómo $setUnion trata los elementos de matrices anidadas, consulte los ejemplos en la sección $setUnion (expression).

Se incluirán en los resultados los argumentos que sean null o se resuelvan en null. Los argumentos que se refieren a un campo que falta no se incluyen en los resultados.

Los ejemplos de esta página utilizan datos del conjunto de datos sample_mflix. Para obtener más información sobre cómo cargar este conjunto de datos en su implementación autogestionada de MongoDB, consulte Cargar el conjunto de datos de ejemplo. Si realizó alguna modificación en las bases de datos de ejemplo, es posible que deba eliminarlas y volver a crearlas para ejecutar los ejemplos de esta página.

Este ejemplo utiliza $setWindowFields para mostrar cómo se acumulan los géneros en la filmografía de un director a lo largo del tiempo. Cada documento recibe los géneros únicos desde la primera película hasta la película actual.

db.movies.aggregate( [
{
$match: { directors: "Christopher Nolan" }
},
{
$setWindowFields: {
sortBy: { year: 1 },
output: {
genresSoFar: {
$setUnion: "$genres",
window: { documents: [ "unbounded", "current" ] }
}
}
}
},
{
$project: {
_id: 0,
title: 1,
year: 1,
genres: 1,
genresSoFar: 1
}
}
] )

La tubería precedente:

  • Utiliza $match para filtrar las películas dirigidas por Christopher Nolan.

  • Utiliza $setWindowFields para ordenar las películas por year y aplica $setUnion al campo genres sobre una ventana de documentos de [ "unbounded", "current" ]. El campo genresSoFar contiene los géneros únicos desde la primera película en el orden de clasificación hasta la película actual.

  • Utiliza $project para incluir title, year, genres y genresSoFar en la salida.

El array genresSoFar crece a medida que cada película aporta géneros que aún no han aparecido. The Dark Knight Rises y Interstellar no añaden nuevos géneros, por lo que sus ventanas devuelven el mismo conjunto que Inception.