Docs Menu
Docs Home
/
MongoDB 매뉴얼
/

시계열 컬렉션 만들기 및 쿼리Create and Query a Time Series Collection

이 페이지의 내용

  • Time Series 컬렉션 만들기
  • Time Series 컬렉션에 측정값 삽입
  • 시계열 컬렉션 쿼리
  • Time Series 컬렉션에서 집계 실행

이 페이지에서는 코드 예제를 사용하여 time series 컬렉션을 만들고 쿼리하는 방법을 보여 줍니다.

Time Series 컬렉션에 데이터를 삽입하기 전에 db.createCollection() 메서드나 create 명령을 사용하여 명시적으로 컬렉션을 만들어야 합니다.

db.createCollection(
"weather",
{
timeseries: {
timeField: "timestamp",
metaField: "metadata",
granularity: "hours"
}
}
)

참고

기능 호환성 버전

featureCompatibilityVersion아 5.0 이상으로 설정된 시스템에서만 time series 컬렉션을 만들 수 있습니다.

time series 컬렉션을 만들 때 다음 옵션을 지정합니다.

필드
유형
설명

timeseries.timeField

문자열

필수입니다. 각 time series 문서에서 날짜를 포함하는 필드의 이름입니다. time series 컬렉션의 문서에는 timeField 값으로 유효한 BSON 날짜가 있어야 합니다.

timeseries.metaField

문자열

선택 사항입니다. 각 time series 문서에 메타데이터가 포함된 필드의 이름입니다. 지정된 필드의 메타데이터는 고유한 문서 시리즈에 레이블을 지정하는 데 사용되는 데이터여야 합니다. 메타데이터는 거의 변경되지 않아야 합니다.

지정한 필드의 이름이 _id 이거나 timeseries.timeField과 같지 않을 수 있습니다. 필드는 모든 유형이 가능합니다.

timeseries.granularity

문자열

선택 사항입니다. 가능한 값은 다음과 같습니다.

  • "seconds"

  • "minutes"

  • "hours"

기본적으로 MongoDB는 고빈도 수집을 위해 granularity"seconds"로 설정합니다.

Time Series 컬렉션의 데이터가 내부적으로 저장되는 방식을 최적화하여 성능을 향상시키려면 granularity 매개변수를 수동으로 설정합니다. granularity의 값을 선택하려면 연속 수신 측정값 사이의 시간 범위와 가장 일치하는 값을 선택합니다.

timeseries.metaField를 지정하는 경우 metaField 필드에 대해 동일한 고유 값을 갖는 연속 수신 측정값 사이의 시간 범위를 고려합니다. 측정값이 동일한 소스에서 나온 경우 metaField 필드에 대해 동일한 고유 값을 갖는 경우가 많습니다.

timeseries.metaField를 지정하지 않는 경우 컬렉션에 삽입된 모든 측정값 사이의 시간 범위를 고려합니다.

expireAfterSeconds

숫자

선택 사항. 문서가 만료되기 전까지의 시간(초)을 지정하여 time series collection 문서를 자동으로 삭제할 수 있습니다. MongoDB는 만료된 문서를 자동으로 삭제합니다. 자세한 내용 은 time series 컬렉션(TTL)에 대한 자동 제거 설정을 참조하세요.

timeseries 옵션과 함께 허용되는 다른 옵션은 다음과 같습니다.

  • storageEngine

  • indexOptionDefaults

  • collation

  • writeConcern

  • comment

참조:

삽입하는 각 문서에는 단일 측정값이 포함되어야 합니다. 한 번에 여러 문서를 삽입하려면 다음 명령을 실행합니다.

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 쿼리에 대한 자세한 내용은 쿼리 성능 최적화를 참조하세요.

추가 쿼리 기능을 사용하려면 다음과 같은 집계 파이프라인을 사용하십시오.

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
}

돌아가기

시계열