$changeStream

집계 단계에서는 $changeStream 데이터 변경 내용을 실시간으로 추적하는 변경 스트림 커서를 엽니다. 이 단계를 사용하면 애플리케이션이 컬렉션에서 발생하는 삽입, 업데이트, 삭제 및 기타 작업에 반응할 수 있습니다.

문법

{
  $changeStream: {
    allChangesForCluster: <boolean>,
    fullDocument: <string>,
    fullDocumentBeforeChange: <string>,
    resumeAfter: <ResumeToken>,
    startAfter: <ResumeToken>,
    startAtOperationTime: <Timestamp>,
    showExpandedEvents: <boolean>
  }
}

매개 변수

매개 변수 Description
allChangesForCluster Optional. 불리언. true이면 전체 클러스터에 대한 변경 내용을 반환합니다. 기본값은 false입니다.
fullDocument Optional. String. 업데이트 작업에 대해 반환할 내용을 결정합니다. 옵션: 'default', 'updateLookup', 'whenAvailable', 'required'.
fullDocumentBeforeChange Optional. String. 문서의 사전 이미지 값을 반환합니다. 옵션: "off", "whenAvailable", "required".
resumeAfter Optional. 토큰을 다시 시작하여 특정 이벤트 후에 변경 스트림을 다시 시작합니다.
startAfter Optional. 특정 이벤트 후에 변경 스트림을 시작하려면 토큰을 다시 시작합니다.
startAtOperationTime Optional. 특정 시간에서 변경 스트림을 시작하기 위한 타임스탬프입니다.
showExpandedEvents Optional. 불리언. 다른 변경 스트림 이벤트를 포함합니다. 기본값은 false입니다.

예시

스토어 컬렉션에서 이 샘플 문서를 고려합니다.

{
    "_id": "0fcc0bf0-ed18-4ab8-b558-9848e18058f4",
    "name": "First Up Consultants | Beverage Shop - Satterfieldmouth",
    "location": {
        "lat": -89.2384,
        "lon": -46.4012
    },
    "staff": {
        "totalStaff": {
            "fullTime": 8,
            "partTime": 20
        }
    },
    "sales": {
        "totalSales": 75670,
        "salesByCategory": [
            {
                "categoryName": "Wine Accessories",
                "totalSales": 34440
            },
            {
                "categoryName": "Bitters",
                "totalSales": 39496
            },
            {
                "categoryName": "Rum",
                "totalSales": 1734
            }
        ]
    },
    "promotionEvents": [
        {
            "eventName": "Unbeatable Bargain Bash",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 6,
                    "Day": 23
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 7,
                    "Day": 2
                }
            },
            "discounts": [
                {
                    "categoryName": "Whiskey",
                    "discountPercentage": 7
                },
                {
                    "categoryName": "Bitters",
                    "discountPercentage": 15
                },
                {
                    "categoryName": "Brandy",
                    "discountPercentage": 8
                },
                {
                    "categoryName": "Sports Drinks",
                    "discountPercentage": 22
                },
                {
                    "categoryName": "Vodka",
                    "discountPercentage": 19
                }
            ]
        },
        {
            "eventName": "Steal of a Deal Days",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 9,
                    "Day": 21
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 9,
                    "Day": 29
                }
            },
            "discounts": [
                {
                    "categoryName": "Organic Wine",
                    "discountPercentage": 19
                },
                {
                    "categoryName": "White Wine",
                    "discountPercentage": 20
                },
                {
                    "categoryName": "Sparkling Wine",
                    "discountPercentage": 19
                },
                {
                    "categoryName": "Whiskey",
                    "discountPercentage": 17
                },
                {
                    "categoryName": "Vodka",
                    "discountPercentage": 23
                }
            ]
        }
    ]
}

예제 1: 매장 컬렉션의 모든 변경 내용 모니터링

이 작업은 저장소 컬렉션의 모든 변경 내용을 모니터링하도록 변경 스트림을 설정합니다.

db.stores.aggregate([
  {
    $changeStream: {
      fullDocument: "updateLookup"
    }
  }
])

저장소 문서가 업데이트되면 변경 스트림은 전체 문서를 사용하여 변경 이벤트를 반환합니다.

{
  "_id": { "_data": "AeARBpQ/AAAA" },
  "operationType": "update",
  "fullDocument": {
    "_id": "905d1939-e03a-413e-a9c4-221f74055aac",
    "name": "Trey Research | Home Office Depot - Lake Freeda",
    "sales": {
      "revenue": 42500
    },
    "company": "Trey Research",
    "lastUpdated": "ISODate('2024-06-16T10:30:00.000Z')"
  },
  "ns": {
    "db": "StoreData",
    "coll": "stores"
  },
  "documentKey": {
    "_id": "905d1939-e03a-413e-a9c4-221f74055aac"
  }
}