Docs Menu

$derivative(集計)

項目一覧

バージョン 5.0 で追加

$derivative

指定されたウィンドウ内の平均変化率を返します。これは以下を使用して計算されます。

$derivative$setWindowFieldsステージでのみ使用可能です。 を使用する場合は、 $setWindowFieldsステージで ウィンドウ$derivative を指定する必要があります。

$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 }
] )

この例では、 $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 )にソートします。そのため、読み取りは 1 番目になります。

    • outputmilesは、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 }

項目一覧