문서 홈 → 애플리케이션 개발 → MongoDB 매뉴얼
적분(집계)
정의
버전 5.0에 추가.
각 인접한 문서 세트가 다음을 사용하여 사각형을 형성하는 삼각형 규칙을 사용하여 계산된 곡선 아래 영역의 근사치를 반환합니다.
적분 간격에
$setWindowFields
대한 단계의 sortBy 필드값입니다.y축 값에대한
$integral
의 입력 필드 표현식 결과 값입니다.
$integral
은 $setWindowFields
단계에서만 사용할 수 있습니다.
$integral
구문:
{ $integral: { input: <expression>, unit: <time unit> } }
$integral
는 다음 필드가 있는 문서를 가져옵니다.
행동
window 를 생략하면 상한 및 하한이 제한되지 않는 기본 창이 사용됩니다.
예제
미터 장치로 30초 간격으로 측정한 킬로와트 단위의 전력 사용량을 포함하는 powerConsumption
컬렉션을 만듭니다.
db.powerConsumption.insertMany( [ { powerMeterID: "1", timeStamp: new Date( "2020-05-18T14:10:30Z" ), kilowatts: 2.95 }, { powerMeterID: "1", timeStamp: new Date( "2020-05-18T14:11:00Z" ), kilowatts: 2.7 }, { powerMeterID: "1", timeStamp: new Date( "2020-05-18T14:11:30Z" ), kilowatts: 2.6 }, { powerMeterID: "1", timeStamp: new Date( "2020-05-18T14:12:00Z" ), kilowatts: 2.98 }, { powerMeterID: "2", timeStamp: new Date( "2020-05-18T14:10:30Z" ), kilowatts: 2.5 }, { powerMeterID: "2", timeStamp: new Date( "2020-05-18T14:11:00Z" ), kilowatts: 2.25 }, { powerMeterID: "2", timeStamp: new Date( "2020-05-18T14:11:30Z" ), kilowatts: 2.75 }, { powerMeterID: "2", timeStamp: new Date( "2020-05-18T14:12:00Z" ), kilowatts: 2.82 } ] )
이 예제에서는 단계에서 를 사용하여 각 미터 장치에서 측정한 에너지 소비량을 킬로와트시 단위로 $integral
$setWindowFields
출력합니다.
db.powerConsumption.aggregate( [ { $setWindowFields: { partitionBy: "$powerMeterID", sortBy: { timeStamp: 1 }, output: { powerMeterKilowattHours: { $integral: { input: "$kilowatts", unit: "hour" }, window: { range: [ "unbounded", "current" ], unit: "hour" } } } } } ] )
예를 들면 다음과 같습니다.
partitionBy: "$powerMeterID"
는 collection의 문서를powerMeterID
로 파티셔닝합니다.sortBy: { timeStamp: 1 }
각 파티션의 문서를timeStamp
을 기준으로 오름차순(1
)으로 정렬하므로, 가장 이른timeStamp
이 첫 번째가 됩니다.output
범위 창에서$integral
실행되는kilowatts
를powerMeterKilowattHours
사용하여 라는 새 필드에 정수 값을 설정합니다.
이 예제 출력에서는 미터 1과 미터 2로 측정한 에너지 소비가 powerMeterKilowattHours
필드에 표시됩니다.
{ "_id" : ObjectId("60cbdc3f833dfeadc8e62863"), "powerMeterID" : "1", "timeStamp" : ISODate("2020-05-18T14:10:30Z"), "kilowatts" : 2.95, "powerMeterKilowattHours" : 0 } { "_id" : ObjectId("60cbdc3f833dfeadc8e62864"), "powerMeterID" : "1", "timeStamp" : ISODate("2020-05-18T14:11:00Z"), "kilowatts" : 2.7, "powerMeterKilowattHours" : 0.023541666666666666 } { "_id" : ObjectId("60cbdc3f833dfeadc8e62865"), "powerMeterID" : "1", "timeStamp" : ISODate("2020-05-18T14:11:30Z"), "kilowatts" : 2.6, "powerMeterKilowattHours" : 0.045625 } { "_id" : ObjectId("60cbdc3f833dfeadc8e62866"), "powerMeterID" : "1", "timeStamp" : ISODate("2020-05-18T14:12:00Z"), "kilowatts" : 2.98, "powerMeterKilowattHours" : 0.068875 } { "_id" : ObjectId("60cbdc3f833dfeadc8e62867"), "powerMeterID" : "2", "timeStamp" : ISODate("2020-05-18T14:10:30Z"), "kilowatts" : 2.5, "powerMeterKilowattHours" : 0 } { "_id" : ObjectId("60cbdc3f833dfeadc8e62868"), "powerMeterID" : "2", "timeStamp" : ISODate("2020-05-18T14:11:00Z"), "kilowatts" : 2.25, "powerMeterKilowattHours" : 0.019791666666666666 } { "_id" : ObjectId("60cbdc3f833dfeadc8e62869"), "powerMeterID" : "2", "timeStamp" : ISODate("2020-05-18T14:11:30Z"), "kilowatts" : 2.75, "powerMeterKilowattHours" : 0.040625 } { "_id" : ObjectId("60cbdc3f833dfeadc8e6286a"), "powerMeterID" : "2", "timeStamp" : ISODate("2020-05-18T14:12:00Z"), "kilowatts" : 2.82, "powerMeterKilowattHours" : 0.06383333333333334 }
팁
다음도 참조하세요.
IOT 전력 소비에 대한 추가 예시는 실용적인 MongoDB 애그리게이션 을 참조하세요. 전자책.