$derivative(集計)
定義
バージョン 5.0 で追加
指定されたウィンドウ内の平均変化率を返します。これは以下を使用して計算されたものです。
$derivative
は$setWindowFields
ステージでのみ使用可能です。 を使用する場合は、 $setWindowFields
ステージで ウィンドウ$derivative
を指定する必要があります。
$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 } ] )
この例では、 $setWindowFields
ステージの$derivative
を使用して各追跡ディスクの平均速度(1 時間あたりのマイル単位)を取得し、 $match
ステージを使用して 1 時間あたりの速度が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
ステージでは、各ドライバーの 1 時間あたりの平均速度がマイル単位で取得されます。partitionBy: "$truckID"
はコレクション内のドキュメントをtruckID
で分割します。sortBy: { timeStamp: 1 }
は各パーティション内のドキュメントをtimeStamp
ずつ昇順(1
)でソートするため、最も初期の [] 読み取りが最初になります。output
miles
は、truckAverageSpeed
範囲 ウィンドウで実行される$derivative
を使用して、 と呼ばれる新しいフィールドに の派生値を設定します。入力式は
"$miles"
に設定されます。これは微小数計算のターミナルで使用されます。微小数計算の修飾子に使用される
timeStamp
フィールドの$derivative
単位は"hour"
に設定されます。ウィンドウには、下限値
-30
秒(出力の現在のドキュメントから前の30秒)から0
秒(出力の現在のドキュメントのtimeStamp
値と一致する)の間の範囲が含まれます。 つまり、$derivative
は30秒ウィンドウに 1 時間あたりの各トラフィックの平均速度をマイル単位で返します。
$match
ステージでは、「より大きい」演算子$gt
を使用して、速度が 1 時間あたり50マイルを超えたトラフィックに結果をフィルタリングします。
次の出力例では、トラック1の速度がtruckAverageSpeed
フィールドに表示されています。 2の50は表示されていませ2 。
{ "_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 }