$tsIncrement(집계)
정의
버전 5.1에 추가되었습니다.
타임스탬프 에서 증가하는 서수를 long
로 반환합니다.
동일한 초 내에 여러 이벤트가 발생하는 경우 증가하는 서수는 각 이벤트를 고유하게 식별합니다.
$tsIncrement
구문:
{ $tsIncrement: <expression> }
행동
$tsIncrement
반환합니다:
예시
타임스탬프 필드에서 증가 서수 가져오기
회사 주식 금융 시장 판매가 포함된 stockSales
컬렉션을 만듭니다.
db.stockSales.insertMany( [ { _id: 0, symbol: "MDB", saleTimestamp: Timestamp(1622731060, 1) }, { _id: 1, symbol: "MDB", saleTimestamp: Timestamp(1622731060, 2) }, { _id: 2, symbol: "MSFT", saleTimestamp: Timestamp(1714124193, 1) }, { _id: 3, symbol: "MSFT", saleTimestamp: Timestamp(1714124193, 2) }, { _id: 4, symbol: "MSFT", saleTimestamp: Timestamp(1714124193, 3) } ] )
타임스탬프 생성자에서 다음을 수행합니다.
첫 번째 값은 유닉스 시간 이후의 시간(초)입니다.
두 번째 값은 증가하는 서수입니다. 동일한 초 내에 여러 이벤트가 발생하는 경우 증가하는 서수는 각 이벤트를 고유하게 식별합니다.
다음 예시 $tsIncrement
$project
에서는 단계에서 를 사용하여 주식 판매 saleTimestamp
필드 에서 증가하는 서수를 반환합니다.
db.stockSales.aggregate( [ { $project: { _id: 0, saleTimestamp: 1, saleIncrement: { $tsIncrement: "$saleTimestamp" } } } ] )
이 예제에서 $project
에는 다음 출력과 같이 saleTimestamp
및 saleIncrement
필드만 포함됩니다.
{ saleTimestamp: Timestamp({ t: 1622731060, i: 1 }), saleIncrement: Long("1") }, { saleTimestamp: Timestamp({ t: 1622731060, i: 2 }), saleIncrement: Long("2") }, { saleTimestamp: Timestamp({ t: 1714124193, i: 1 }), saleIncrement: Long("1") }, { saleTimestamp: Timestamp({ t: 1714124193, i: 2 }), saleIncrement: Long("2") }, { saleTimestamp: Timestamp({ t: 1714124193, i: 3 }), saleIncrement: Long("3") }
변경 스트림 커서에서 를 사용하여 컬렉션 변경 사항 모니터링 $tsIncrement
이 섹션의 예시에서는 변경 스트림 커서에서 $tsIncrement
를 사용하여 컬렉션에 대한 다른 모든 변경 사항을 동일한 초 단위로 반환합니다.
이 섹션의 뒷부분에서 볼 수 있는 cakeSales
컬렉션에 변경 스트림 커서 를 생성합니다.
cakeSalesCursor = db.cakeSales.watch( [ { $match: { $expr: { $eq: [ { $mod: [ { $tsIncrement: "$clusterTime" } , 2 ] }, 0 ] } } } ] )
이 예제에서는 다음과 같습니다.
db.collection.watch()
메서드는cakeSales
컬렉션에 대한 변경 스트림 커서를 만들고 커서를cakeSalesCursor
에 저장합니다.$expr
연산자:$tsIncrement
가 반환하는$clusterTime
변수의 증가 서수에$mod
2
를 적용합니다.$clusterTime
은(는)cakeSales
collection 수정될 때 oplog 항목의 타임스탬프입니다. 명령 응답을 참조하세요.$eq
을 사용하여$mod
에서 반환된 값을0
와 비교합니다
캘리포니아주(CA
)와 워싱턴주(WA
)의 케이크 판매량이 포함된 cakeSales
collection을 생성합니다.
db.cakeSales.insertMany( [ { _id: 0, type: "chocolate", orderDate: new Date("2020-05-18T14:10:30Z"), state: "CA", price: 13, quantity: 120 }, { _id: 1, type: "chocolate", orderDate: new Date("2021-03-20T11:30:05Z"), state: "WA", price: 14, quantity: 140 }, { _id: 2, type: "vanilla", orderDate: new Date("2021-01-11T06:31:15Z"), state: "CA", price: 12, quantity: 145 }, { _id: 3, type: "vanilla", orderDate: new Date("2020-02-08T13:13:23Z"), state: "WA", price: 13, quantity: 104 }, { _id: 4, type: "strawberry", orderDate: new Date("2019-05-18T16:09:01Z"), state: "CA", price: 41, quantity: 162 }, { _id: 5, type: "strawberry", orderDate: new Date("2019-01-08T06:12:03Z"), state: "WA", price: 43, quantity: 134 } ] )
cakeSales
컬렉션 변경 사항을 모니터링하려면 cakeSalesCursor
를 사용하세요. 예를 들어, cakeSalesCursor
에서 다음 문서를 얻으려면 next()
메서드를 사용하세요.
cakeSalesCursor.next()
문서가 cakeSales
에 추가된 초에 따라 cakeSalesCursor.next()
의 출력이 달라집니다. 예를 들어, 문서 추가는 1초 이상 지속될 수 있습니다.
다음 cakeSalesCursor.next()
예제 출력은 insert
cakeSales
collection에 추가된 첫 번째 문서의 세부 정보를 보여줍니다. clusterTime
필드에서 증가하는 서수 i
가 2
인 것을 알 수 있습니다.
_id: { _data: '82613A4F25000000022B022C0100296E5A100454C5BFAF538C47AB950614F43889BE00461E5F696400290004' }, operationType: 'insert', clusterTime: Timestamp({ t: 1631211301, i: 2 }), fullDocument: { _id: 0, type: 'chocolate', orderDate: ISODate("2020-05-18T14:10:30.000Z"), state: 'CA', price: 13, quantity: 120 }, ns: { db: 'test', coll: 'cakeSales' }, documentKey: { _id: 0 }
cakeSalesCursor.next()
을 다시 실행하면 clusterTime
증분 서수 i
가 4
인 cakeSales
문서가 반환되고, i
가 3
인 문서는 생략됩니다.