시계열 컬렉션 만들기 및 쿼리Create and Query a Time Series Collection
이 페이지에서는 코드 예제를 사용하여 time series 컬렉션을 만들고 쿼리하는 방법을 보여 줍니다.
Time Series 컬렉션 만들기
Time Series 컬렉션에 데이터를 삽입하기 전에 db.createCollection()
메서드나 create
명령을 사용하여 명시적으로 컬렉션을 만들어야 합니다.
db.createCollection( "weather", { timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "hours" } } )
timeseries
객체 필드
time series 컬렉션을 만들 때 다음 옵션을 지정합니다.
필드 | 유형 | 설명 |
---|---|---|
| 문자열 | 필수입니다. 각 time series 문서에서 날짜를 포함하는 필드의 이름입니다. time series 컬렉션의 문서에는 |
| 문자열 | 선택 사항입니다. 각 time series 문서에 메타데이터가 포함된 필드의 이름입니다. 지정된 필드의 메타데이터는 고유한 문서 시리즈에 레이블을 지정하는 데 사용되는 데이터여야 합니다. 메타데이터는 거의 변경되지 않아야 합니다. 지정한 필드의 이름이 |
| 문자열 | 선택 사항입니다. 가능한 값은 다음과 같습니다.
기본적으로 MongoDB는 고빈도 수집을 위해 Time Series 컬렉션의 데이터가 내부적으로 저장되는 방식을 최적화하여 성능을 향상시키려면
|
| 숫자 | 선택 사항. 문서가 만료되기 전까지의 시간(초)을 지정하여 time series collection 문서를 자동으로 삭제할 수 있습니다. MongoDB는 만료된 문서를 자동으로 삭제합니다. 자세한 내용 은 time series 컬렉션(TTL)에 대한 자동 제거 설정을 참조하세요. |
timeseries
옵션과 함께 허용되는 다른 옵션은 다음과 같습니다.
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 }