Definição
Retorna uma array de valores únicos para uma expressão avaliada em documentos em um grupo. A ordem dos elementos na array não é especificada.
$addToSet está disponível nestes estágios:
Observação
Desambiguação
Esta página descreve $addToSet quando usado como acumulador. Os acumuladores retornam um único valor agregado como soma, máximo ou mínimo em um grupo de documentos de entrada.
Você também pode usar $addToSet nestes outros contextos:
$addToSet (window function), que é usado no estágio$setWindowFieldspara retornar uma array de valores únicos de documentos em uma janela específica.$addToSet (update operator), que adiciona elementos exclusivos a um campo de array em um documento.
Sintaxe
{ $addToSet: <expression> }
Para mais informações sobre expressões, consulte Expressões.
Comportamento
Se o valor da expressão for uma array, $addToSet anexará a array inteira como um único elemento.
Se o valor da expressão for um documento, o MongoDB determinará que o documento é duplicado se outro documento na array corresponder exatamente ao documento adicionado. Especificamente, o documento existente tem exatamente os mesmos campos e valores na mesma ordem.
Exemplo
Os exemplos nesta página usam dados do conjunto de dados sample_mflix. Para obter detalhes sobre como carregar esse conjunto de dados em sua implantação autogerenciada do MongoDB , consulte Carregar o conjunto de dados de amostra. Se você fez modificações nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.
A operação a seguir agrupa filmes por diretor e usa o acumulador $addToSet para coletar os gêneros exclusivos em que cada diretor trabalhou. Para melhorar a legibilidade, o pipeline limita os resultados aos cinco primeiros diretores em ordem alfabética.
db.movies.aggregate( [ { $unwind: "$directors" }, { $unwind: "$genres" }, { $group: { _id: "$directors", genres: { $addToSet: "$genres" } } }, { $sort: { _id: 1 } }, { $limit: 5 } ] )
Esse pipeline retorna esses 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' ] } ]