Definición
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.
Sintaxis
{ $setWindowFields: { ... output: { <field>: { $setUnion: <array field> } } } }
Comportamiento
$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.
Ejemplo
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
$matchpara filtrar las películas dirigidas por Christopher Nolan.Utiliza
$setWindowFieldspara ordenar las películas poryeary aplica$setUnional campogenressobre una ventana de documentos de[ "unbounded", "current" ]. El campogenresSoFarcontiene los géneros únicos desde la primera película en el orden de clasificación hasta la película actual.Utiliza
$projectpara incluirtitle,year,genresygenresSoFaren 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.