시계열 컬렉션 만들기 및 쿼리Create and Query a Time Series Collection
이 페이지에서는 time series 컬렉션을 만들고 쿼리하는 방법을 코드 예시를 사용해 설명합니다.
Time Series 컬렉션 만들기
timeField
를 시간 데이터를 포함하는 필드로 정의하고 metaField
를 메타데이터를 포함하는 필드로 정의합니다.
{ timeField: "timestamp", metaField: "metadata" }
이번 예시에서 timestamp
는 timeField
이름이고 metadata
는 metaField
이름입니다. timestamp
필드 값은 날짜 유형이어야 합니다.
중요
컬렉션에 적합한 metaField
를 선택하면 스토리지와 쿼리 성능이 모두 최적화됩니다. metaField
선택 및 모범 사례에 대한 자세한 내용은 metaFields를 참조하세요.
아래 두 가지 접근 방식 중 하나를 사용하여 각 데이터 버킷의 시간 간격을 정의하세요.
중요
Time Series 간격 변경
생성 후 collMod
메서드를 사용하여 세분성 또는 버킷 정의를 수정할 수 있습니다. 그러나 각 버킷에 적용되는 기간을 늘릴 수만 있습니다. 줄일 수는 없습니다.
granularity
필드를 정의합니다:{ granularity: "seconds" } granularity
값을 선택하는 것에 대한 자세한 내용은 세분성 고려 사항을 참조하세요.
또는
MongoDB 6.3 이상에서는
bucketMaxSpanSeconds
및bucketRoundingSeconds
필드를 정의할 수 있습니다. 두 값은 모두 동일해야 합니다.{ bucketMaxSpanSeconds: "300", bucketRoundingSeconds: "300" }
선택적으로, timeField
의 값이 그 이상 오래된 경우 문서가 만료되도록 expireAfterSeconds
를 설정합니다.
{ expireAfterSeconds: 86400 }
db.createCollection()
메서드 또는 create
명령을 사용하여 컬렉션을 생성합니다. 다음 예시에서는 db.createCollection()
메서드를 사용하여 weather
Time Series 컬렉션을 만듭니다.
db.createCollection( "weather", { timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "seconds" }, expireAfterSeconds: 86400 } )
Time Series 필드 참조
time series 컬렉션에는 다음 필드가 포함됩니다.
필드 | 유형 | 설명 |
---|---|---|
| 문자열 | 필수입니다. 각 time series 문서에서 날짜를 포함하는 필드의 이름입니다. time series 컬렉션의 문서에는 |
| 문자열 | 선택 사항. 각 time series 문서에 메타데이터가 포함된 필드의 이름입니다. 지정된 필드의 메타데이터는 고유한 문서 시리즈에 레이블을 지정하는 데 사용되는 데이터여야 합니다. 메타데이터는 거의 변경되지 않아야 합니다. 지정된 필드의 이름은
|
| integer | 선택 사항입니다. 가능한 값은 연속적으로 들어오는 타임스탬프 사이의 시간과 가장 근접하게 일치하는 값으로 세분 수준 및 버킷 간격에 대한 자세한 내용은 Time Series 데이터의 세부 수준 설정을 참조하세요. |
| integer | 선택 사항입니다. 가능한 값은 1-31536000입니다. 버전 6.3에 추가. |
| integer | 선택 사항. 문서에 새 버킷이 필요한 경우 MongoDB는 문서의 타임스탬프 값을 이 간격으로 반올림하여 버킷의 최소 시간을 설정합니다. 버전 6.3에 추가. |
| integer | 선택 사항입니다. 문서가 만료되기 전까지의 시간(초)을 지정하여 Time Series 컬렉션 문서를 자동으로 삭제할 수 있습니다. MongoDB는 만료된 문서를 자동으로 삭제합니다. 자세한 내용은 Time Series(TTL)에 대한 자동 제거 설정하기를 참조하세요. |
Time Series 컬렉션에 국한되지 않는 다른 허용 옵션은 다음과 같습니다.
storageEngine
indexOptionDefaults
collation
writeConcern
comment
Time Series 컬렉션에 측정값 삽입
삽입하는 각 문서에는 단일 측정값이 포함되어야 합니다. 한 번에 여러 문서를 삽입하려면 다음 명령을 실행합니다.
db.weather.insertMany( [ { metadata: { sensorId: 5578, type: "temperature" }, timestamp: ISODate("2021-05-18T00:00:00.000Z"), temp: 12 }, { metadata: { sensorId: 5578, type: "temperature" }, timestamp: ISODate("2021-05-18T04:00:00.000Z"), temp: 11 }, { metadata: { sensorId: 5578, type: "temperature" }, timestamp: ISODate("2021-05-18T08:00:00.000Z"), temp: 11 }, { metadata: { sensorId: 5578, type: "temperature" }, timestamp: ISODate("2021-05-18T12:00:00.000Z"), temp: 12 }, { metadata: { sensorId: 5578, type: "temperature" }, timestamp: ISODate("2021-05-18T16:00:00.000Z"), temp: 16 }, { metadata: { sensorId: 5578, type: "temperature" }, timestamp: ISODate("2021-05-18T20:00:00.000Z"), temp: 15 }, { metadata: { sensorId: 5578, type: "temperature" }, timestamp: ISODate("2021-05-19T00:00:00.000Z"), temp: 13 }, { metadata: { sensorId: 5578, type: "temperature" }, timestamp: ISODate("2021-05-19T04:00:00.000Z"), temp: 12 }, { metadata: { sensorId: 5578, type: "temperature" }, timestamp: ISODate("2021-05-19T08:00:00.000Z"), temp: 11 }, { metadata: { sensorId: 5578, type: "temperature" }, timestamp: ISODate("2021-05-19T12:00:00.000Z"), temp: 12 }, { metadata: { sensorId: 5578, type: "temperature" }, timestamp: ISODate("2021-05-19T16:00:00.000Z"), temp: 17 }, { metadata: { sensorId: 5578, type: "temperature" }, timestamp: ISODate("2021-05-19T20:00:00.000Z"), temp: 12 } ] )
단일 문서를 삽입하려면 db.collection.insertOne()
방법을 사용합니다.
시계열 컬렉션 쿼리
표준 MongoDB 컬렉션을 쿼리하는 것과 동일한 방식으로 time-series 컬렉션을 쿼리합니다.
time series 컬렉션에서 하나의 문서를 반환하려면 다음을 실행하세요.
db.weather.findOne( { timestamp: ISODate("2021-05-18T00:00:00.000Z") } )
출력 예시:
{ timestamp: ISODate("2021-05-18T00:00:00.000Z"), metadata: { sensorId: 5578, type: 'temperature' }, temp: 12, _id: ObjectId("62f11bbf1e52f124b84479ad") }
Time Series 쿼리에 대한 자세한 내용은 쿼리 모범 사례를 참조하세요.
Time Series 컬렉션에서 집계 실행
추가 쿼리 기능을 사용하려면 다음과 같은 집계 파이프라인을 사용하십시오.
db.weather.aggregate( [ { $project: { date: { $dateToParts: { date: "$timestamp" } }, temp: 1 } }, { $group: { _id: { date: { year: "$date.year", month: "$date.month", day: "$date.day" } }, avgTmp: { $avg: "$temp" } } } ] )
예시된 집계 파이프라인은 모든 문서를 측정 날짜별로 그룹화한 다음, 해당 날짜의 모든 온도 측정값의 평균을 반환합니다.
{ "_id" : { "date" : { "year" : 2021, "month" : 5, "day" : 18 } }, "avgTmp" : 12.714285714285714 } { "_id" : { "date" : { "year" : 2021, "month" : 5, "day" : 19 } }, "avgTmp" : 13 }