정의
특정 창 모든 고유 값으로 구성된 배열 반환합니다.
반환되는 배열의 요소 순서는 지정되지 않습니다.
참고
명확화
이 페이지에서는 창 함수로 사용되는 경우의 $addToSet에 대해 설명합니다.
다음과 같은 다른 컨텍스트에서도 $addToSet를 사용할 수 있습니다.
$addToSet (accumulator)는 다양한 입력 문서 수를 기반으로 애그리게이션된 단일 값을 반환합니다.$addToSet (update operator)문서 의 배열 필드 에 요소를 추가합니다.
구문
{ $setWindowFields: { ... output: { <field>: { $addToSet: <expression> } } } }
행동
표현식 의 값이 배열 인 경우 $addToSet는 전체 배열 단일 요소로 추가합니다.
표현식의 값이 문서인 경우, 배열의 다른 문서가 추가할 문서와 정확히 일치하면 MongoDB는 해당 문서가 중복된 것으로 판단합니다. 특히 기존 문서에는 정확히 동일한 필드와 값이 정확히 동일한 순서로 있는 경우입니다.
예시
이 페이지의 예제에서는 sample_mflix 데이터 세트의 데이터를 사용합니다. 이 데이터 세트를 자체 관리형 MongoDB deployment 에 로드하는 방법에 대한 자세한 내용은 샘플 데이터 세트 로드를 참조하세요. 샘플 데이터베이스를 수정한 경우 이 페이지의 예제를 실행 하려면 데이터베이스를 삭제하고 다시 만들어야 할 수 있습니다.
이 예시 $addToSet 창 함수를 사용하여 시간이 지남에 따라 여러 영화에 걸쳐 고유한 장르가 어떻게 누적되는지 보여줍니다. 영화는 제목별로 알파벳순으로 정렬되며, 창 기능은 결과 설정하다 의 시작 부분부터 현재 영화를 포함하여 영화에 나타난 모든 고유 장르를 추적합니다.
db.movies.aggregate( [ { $match: { year: 2002, genres: { $exists: true, $ne: [] } } }, { $group: { _id: { year: "$year", title: "$title", genre: { $first: "$genres" } }, } }, { $setWindowFields: { sortBy: { "_id.title": 1 }, output: { genresSeenSoFar: { $addToSet: "$_id.genre", window: { documents: [ "unbounded", "current" ] } } } } }, { $project: { _id: 0, year: "$_id.year", title: "$_id.title", genre: "$_id.genre", genresSeenSoFar: 1, uniqueGenreCount: { $size: "$genresSeenSoFar" } } }, { $limit: 8 } ] )
예시:
$match단계는 장르 정보가 포함된 2002의 영화를 필터링합니다.$group단계는genres배열 의 연도, 제목 및 첫 번째 장르를 기준으로 그룹화합니다.$setWindowFields단계에서는unbounded~current창 있는$addToSet를 사용하여 결과 설정하다 의 시작 부분부터 현재 문서 까지 고유한 장르를 누적합니다.$project단계는 출력의 형태를 변경하고uniqueGenreCount를 계산하여 설정하다 크기가 어떻게 증가하는지 보여줍니다.$limit단계는 출력을 8 문서로 제한합니다.
출력은 $addToSet이 문서 전체에서 고유한 장르를 어떻게 축적하는지 보여줍니다. 각 영화가 설정하다 에 장르를 추가함에 따라 genresSeenSoFar이(가) 1 장르에서 7 장르로 성장하는 것을 볼 수 있습니다. 일곱 번째 문서 ('3 Extremes II')는 해당 장르(공포)가 이미 설정하다 에 포함되어 있기 때문에 여섯 번째 문서와 동일한 uniqueGenreCount를 갖습니다. 이는 $addToSet가 고유한 값만 추가하고 중복은 무시한다는 것을 보여줍니다.