Definición
Devuelve una matriz de valores únicos para una expresión evaluada en varios documentos de un grupo. El orden de los elementos en la matriz no está especificado.
$addToSet está disponible en estas etapas:
Nota
Desambiguación
Esta página describe $addToSet cuando se utiliza como acumulador. Los acumuladores devuelven un único valor agregado, como la suma, el máximo o el mínimo, de un grupo de documentos de entrada.
También puedes usar $addToSet en estos otros contextos:
$addToSet (window function), que se utiliza en la etapa$setWindowFieldspara devolver una matriz de valores únicos de los documentos en una ventana en particular.$addToSet (update operator), que agrega elementos únicos a un campo de matriz en un documento.
Sintaxis
{ $addToSet: <expression> }
Para obtener más información sobre las expresiones, consulta Expresiones.
Comportamiento
Si el valor de la expresión es una matriz, $addToSet agrega toda la matriz como un solo elemento.
Si el valor de la expresión es un documento, MongoDB determina que el documento es un duplicado si otro documento del arreglo coincide exactamente con el documento que se va a agregar. En concreto, el documento existente tiene exactamente los mismos campos y valores en el mismo orden.
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.
La siguiente operación agrupa las películas por director y utiliza el acumulador $addToSet para recopilar los géneros únicos en los que ha trabajado cada director. Para facilitar la lectura, el proceso limita los resultados a los cinco primeros directores en orden alfabético.
db.movies.aggregate( [ { $unwind: "$directors" }, { $unwind: "$genres" }, { $group: { _id: "$directors", genres: { $addToSet: "$genres" } } }, { $sort: { _id: 1 } }, { $limit: 5 } ] )
Esta pipeline devuelve estos resultados:
[ { _id: 'A. Dean Bell', genres: [ 'Crime', 'Drama' ] }, { _id: 'A. Karunakaran', genres: [ 'Romance' ] }, { _id: 'A. Vanichkin', genres: [ 'Animation', 'Fantasy' ] }, { _id: 'A.J. Edwards', genres: [ 'Biography', 'Drama', 'History' ] }, { _id: 'A.R. Murugadoss', genres: [ 'Drama', 'Sci-Fi', 'Thriller', 'Action', 'Mystery' ] } ]