定義
バージョン 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 }