Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

$derivative(集計)

項目一覧

  • 定義
  • 動作

バージョン 5.0 で追加

$derivative

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

  • $setWindowFieldsステージウィンドウの最初と最後のドキュメント。

  • 数値。最後のドキュメントの 値から最初のドキュメントの数値 値を減算した結果に設定されます。

  • 最後のドキュメントの sortBy フィールド値から最初のドキュメントの sortBy フィールド値を減算した結果に設定される識別子。

$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 )でソートするため、最も初期の [] 読み取りが最初になります。

    • 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 }

戻る

$denseRank

項目一覧