파생(집계)
정의
버전 5.0에 추가.
지정된 창 내의 평균 변화율을 반환하며, 이는 다음을 사용하여 계산됩니다.
Numerator는 마지막 문서의 표현식 값에서 첫 번째 문서의 숫자 표현식 값을 뺀 결과로 설정됩니다.
분모는 마지막 문서의 sortBy 필드 값에서 첫 번째 문서의 sortBy 필드 값을 뺀 결과로 설정됩니다.
$derivative
은 $setWindowFields
단계에서만 사용할 수 있습니다. $derivative
를 사용할 $setWindowFields
때는 단계에서 윈도우 를 지정해야 합니다.
$derivative
구문:
{ $derivative: { input: <expression>, unit: <time unit> } }
$derivative
(은)는 다음 필드가 있는 문서를 가져옵니다.
행동
사용할 때는 단계에서 윈도우 $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 }