정의
그룹의 문서에 걸쳐 평가된 고유한 표현식 값의 배열을 반환합니다. 배열의 요소 순서는 지정되지 않습니다.
$addToSet 이 단계에서 사용할 수 있습니다:
참고
명확화
이 페이지에서는 $addToSet을 축적자로 사용할 때에 대해 설명합니다. 축적자는 입력 문서 그룹 전체에 걸쳐 합계, 최댕값 또는 최소값과 같은 단일 집계 값을 반환합니다.
$addToSet를 다른 다음 문맥에서도 사용할 수 있습니다:
$addToSet (window function)는 특정 창의 문서에서 고유한 값의 배열을 반환하기 위해$setWindowFields단계에서 사용됩니다.$addToSet (update operator), 문서의 배열 필드에 고유한 요소를 추가합니다.
구문
{ $addToSet: <expression> }표현식에 대한 자세한 내용은 표현식을 참조하세요 .
행동
표현식의 값이 배열인 경우, $addToSet는 전체 배열을 단일 요소로 추가합니다.
표현식의 값이 문서인 경우, 배열의 다른 문서가 추가할 문서와 정확히 일치하면 MongoDB는 해당 문서가 중복된 것으로 판단합니다. 특히 기존 문서에는 정확히 동일한 필드와 값이 정확히 동일한 순서로 있는 경우입니다.
$addToSet 디스크에 임시 파일을 쓰기 (write) 수 없습니다. internalQueryMaxAddToSetBytes 서버 매개 변수는 $addToSet 메모리 제한을 제어하며, 누적된 배열이 해당 제한을 초과하면 allowDiskUse가 true인 경우에도 MongoDB는 오류를 반환합니다. 기본값은 104857600 바이트(100 메가바이트)입니다. setParameter 명령을 사용하여 런타임에 제한을 높일 수 있습니다.
집계 메모리 제한에 대한 자세한 내용은 집계 파이프라인 제한을 참조하세요.
예시
이 페이지의 예시는 sample_mflix 데이터 세트의 데이터를 사용합니다. 이 데이터 세트를 자체 관리형 MongoDB 배포서버에 로드하는 방법에 대한 자세한 내용은 샘플 데이터세트 로드를 참조하세요. 샘플 데이터베이스를 수정한 경우, 이 페이지의 예시를 실행하려면 데이터베이스를 제거하고 다시 생성해야 할 수 있습니다.
다음 작업은 영화를 디렉터별로 그룹하고 $addToSet 축적자를 사용하여 각 디렉터가 작업한 고유한 장르를 수집합니다. 가독성 향상을 위해 파이프라인은 결과를 알파베숫 순서로 정렬된 처음 5명의 디렉터로 제한합니다.
db.movies.aggregate( [ { $unwind: "$directors" }, { $unwind: "$genres" }, { $group: { _id: "$directors", genres: { $addToSet: "$genres" } } }, { $sort: { _id: 1 } }, { $limit: 5 }] )이 파이프라인 다음 결과를 반환합니다.
[ { _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' ] }]