Definição
Retorna uma array de valores exclusivos 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 um acumulador. 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$setWindowFieldsestágio para retornar uma array de valores únicos de documentos em uma janela específica.$addToSet (update operator), que adiciona elementos únicos 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 a anexará 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 este conjunto de dados em sua implantação do MongoDB autogerenciado, consulte Carregar o conjunto de dados de amostra. Se você fez alguma modificação 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 únicos em que cada diretor atuou. 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' ] } ]