정의
창 에서 입력 문서를 병합하여 만든 문서 반환합니다.
참고
명확화
이 페이지에서는 창 함수로 사용되는 경우의 $mergeObjects에 대해 설명합니다.
다음과 같은 다른 컨텍스트에서도 $mergeObjects를 사용할 수 있습니다.
$mergeObjects (accumulator)는 입력 문서 그룹 에서 병합된 문서 반환합니다.$mergeObjects (expression)은(는) 문서 배열 단일 문서 로 병합합니다.
구문
{ $setWindowFields: { output: { <outputField>: { $mergeObjects: <document>, window: { <documents|range>: [ "unbounded", <upper> ] } } } } }
참고
$setWindowFields의 sortBy 옵션은 창 상한이 "unbounded"이거나 window가 생략된 경우 선택 사항입니다. sortBy는 "current"과 같이 창 상한이 "unbounded"이 아닌 경우에 필요합니다.
sortBy을(를) 생략하면 $mergeObjects이(가) 충돌하는 필드 이름을 해결하는 순서가 보장되지 않습니다.
명령 필드
필드 | 유형 | 필요성 | 설명 |
|---|---|---|---|
| 표현식 | 필수 사항 | 문서 로 평가되는 필드 이름 또는 표현식 . |
| 문서 | 옵션 |
|
행동
이동할 수 없는 Windows
$mergeObjects 제거할 수 없는 창만 지원하므로 하한은 "unbounded"입니다. 하한이 "unbounded"이 아닌 창 지정하면 작업은 오류를 반환합니다.
Null 입력 처리
$mergeObjects null 입력 값을 무시합니다. 모든 입력 값이 null인 경우, $mergeObjects는 빈 문서 { }를 반환합니다.
필드 덮어쓰기 동작
$mergeObjects 문서를 병합할 때 필드 값을 덮어씁니다. 여러 입력 문서에 동일한 필드 이름이 포함된 경우 출력에는 충돌하는 필드 포함된 마지막 입력 문서 의 값이 포함됩니다.
예시
productUpdates collection을 만듭니다.
db.productUpdates.insertMany( [ { _id: 1, product: "gadget", date: ISODate("2024-01-01"), specs: { color: "blue" } }, { _id: 2, product: "gadget", date: ISODate("2024-01-02"), specs: { size: "medium" } }, { _id: 3, product: "gadget", date: ISODate("2024-01-03"), specs: { weight: 0.5 } }, { _id: 4, product: "widget", date: ISODate("2024-01-01"), specs: { color: "red" } }, { _id: 5, product: "widget", date: ISODate("2024-01-02"), specs: { material: "plastic" } } ] )
각 문서 새 사양 필드를 추가하는 제품 업데이트 나타냅니다. 각 업데이트 specs 하위 문서에 서로 다른 필드 이름을 제공하기 때문에, $mergeObjects은 창 확장됨에 따라 전체 사양 프로필을 누적할 수 있습니다.
다음 파이프라인 $setWindowFields의 $mergeObjects를 사용하여 창 에 새 사양이 추가될 때 누적적으로 업데이트되는 제품 사양 목록을 반환합니다. 각 문서 에 대해 cumulativeSpecs에는 현재 문서 포함하여 모든 업데이트의 병합된 사양이 포함되어 있습니다.
db.productUpdates.aggregate( [ { $setWindowFields: { partitionBy: "$product", sortBy: { date: 1 }, output: { cumulativeSpecs: { $mergeObjects: "$specs", window: { documents: [ "unbounded", "current" ] } } } } }, { $sort: { product: 1, date: 1 } }, { $project: { _id: 0, product: 1, date: 1, specs: 1, cumulativeSpecs: 1 } } ] )
이전 파이프라인의 경우:
$setWindowFields는 문서를product를 기준으로 분할하고date를 기준으로 오름차순으로 정렬합니다.$mergeObjectsunbounded에서current창 사용하여 각 파티션의 시작 부분부터 현재 문서 까지 모든specs문서를 병합하여 실행 누적 사양을 생성합니다.$sort는 최종 결과를product및date를 기준으로 오름차순으로 정렬합니다.