문서 메뉴
문서 홈
/
MongoDB 매뉴얼
/ / /

파생(집계)

이 페이지의 내용

  • 정의
  • 행동
  • 예제

버전 5.0에 추가.

$derivative

지정된 기간 내의 평균 변화율을 반환하며, 이는 다음을 사용하여 계산됩니다.

$derivative$setWindowFields 단계에서만 사용할 수 있습니다. $derivative 사용할 $setWindowFields때는 단계에서 윈도우 를 지정해야 합니다.

$derivative 구문:

{
$derivative: {
input: <expression>,
unit: <time unit>
}
}

$derivative (은)는 다음 필드가 있는 문서를 가져옵니다.

필드
설명

평가할 표현식 을 지정합니다. 표현식은 숫자로 평가되어야 합니다.

시간 단위를 지정하는 string입니다. 다음 문자열 중 하나를 사용합니다.

  • "week"

  • "day"

  • "hour"

  • "minute"

  • "second"

  • "millisecond"

SortBy 필드가 날짜가 아닌 경우 unit을 생략해야 합니다. unit을 지정하는 경우 SortBy 필드에 날짜를 지정해야 합니다.

사용할 때는 단계에서 윈도우 $setWindowFields $derivative 를 지정해야 합니다.

30 초 간격으로 기록된 배달 트럭의 주행 거리계 판독값이 포함된 deliveryFleet 컬렉션을 만듭니다.

db.deliveryFleet.insertMany( [
{ truckID: "1", timeStamp: new Date( "2020-05-18T14:10:30Z" ), miles: 1295.1 },
{ truckID: "1", timeStamp: new Date( "2020-05-18T14:11:00Z" ), miles: 1295.63 },
{ truckID: "1", timeStamp: new Date( "2020-05-18T14:11:30Z" ), miles: 1296.25 },
{ truckID: "1", timeStamp: new Date( "2020-05-18T14:12:00Z" ), miles: 1296.76 },
{ truckID: "2", timeStamp: new Date( "2020-05-18T14:10:30Z" ), miles: 10234.1 },
{ truckID: "2", timeStamp: new Date( "2020-05-18T14:11:00Z" ), miles: 10234.33 },
{ truckID: "2", timeStamp: new Date( "2020-05-18T14:11:30Z" ), miles: 10234.73 },
{ truckID: "2", timeStamp: new Date( "2020-05-18T14:12:00Z" ), miles: 10235.13 }
] )

이 예제에서는 $derivative $setWindowFields 단계에서 를 사용하여 각 트럭의 평균 속도를 시속 마일 단위로 구하고, 단계에서 속도가 $match 시속 마일을 초과하는 트럭으로 결과를 50 필터링합니다.

db.deliveryFleet.aggregate( [
{
$setWindowFields: {
partitionBy: "$truckID",
sortBy: { timeStamp: 1 },
output: {
truckAverageSpeed: {
$derivative: {
input: "$miles",
unit: "hour"
},
window: {
range: [ -30, 0 ],
unit: "second"
}
}
}
}
},
{
$match: {
truckAverageSpeed: {
$gt: 50
}
}
}
] )

예를 들면 다음과 같습니다.

  • $setWindowFields 단계에서는 각 트럭의 평균 속도를 시간당 마일 단위로 가져옵니다.

    • partitionBy: "$truckID" 는 collection의 문서를 truckID파티셔닝합니다.

    • sortBy: { timeStamp: 1 } 는 각 파티션의 문서를 timeStamp 기준으로 오름차순( 1 )으로 정렬 하므로 가장 이른 주행 거리계 판독값이 먼저 표시됩니다.

    • output 범위 창에서 $derivative 실행되는 를 사용하여 이라는 miles 새 필드에 도함수 값을 설정합니다.truckAverageSpeed

      • 입력 표현식은 "$miles" 으로 설정되며, 이는 도함수 계산을 위한 분자에 사용됩니다.

      • $derivative 단위 는 도함수 계산의 분모로 사용되는 timeStamp 필드에 대해 "hour" 로 설정됩니다.

      • 에는 하한인 -30 초(출력에서 현재 문서의 이전 30 초)부터 0 초(출력에서 현재 문서의 timeStamp 값과 일치) 사이의 범위 가 포함됩니다. 즉, $derivative 은 30 초 창에서 각 트럭의 평균 속도를 시간당 마일 단위로 반환합니다.

  • $match 단계에서는 보다 큼 연산자 $gt 를 사용하여 속도가 시속 50 마일을 초과하는 트럭으로 결과를 필터링합니다.

다음 예시 출력에서는 트럭 1 의 속도가 truckAverageSpeed 필드에 표시됩니다. 2 트럭의 속도는 2 트럭이 시속 50 마일을 초과하지 않았으므로 표시되지 않습니다.

{ "_id" : ObjectId("60cb8a7e833dfeadc8e6285c"), "truckID" : "1",
"timeStamp" : ISODate("2020-05-18T14:11:00Z"), "miles" : 1295.63,
"truckAverageSpeed" : 63.60000000002401 }
{ "_id" : ObjectId("60cb8a7e833dfeadc8e6285d"), "truckID" : "1",
"timeStamp" : ISODate("2020-05-18T14:11:30Z"), "miles" : 1296.25,
"truckAverageSpeed" : 74.3999999999869 }
{ "_id" : ObjectId("60cb8a7e833dfeadc8e6285e"), "truckID" : "1",
"timeStamp" : ISODate("2020-05-18T14:12:00Z"), "miles" : 1296.76,
"truckAverageSpeed" : 61.199999999998916 }

돌아가기

$denseRank

다음

$divide

이 페이지의 내용