AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

$linearFill(式演算子)

$linearFill

バージョン5.3の新機能。

null線形補間 を使用して、周囲のフィールド値に基づき、ウィンドウ内の と欠落フィールドを埋めます。

$linearFill$setWindowFields ステージでのみ使用可能です。

$linearFill式は次の構文をとります。

{ $linearFill: <expression> }

式の詳細については、「式 」を参照してください。

$linearFillnullnullは、周囲の 以外のフィールド値に基づき、線形補間を使用して と欠落フィールドを埋めます。周囲のフィールド値は、$setWindowFields で指定された並べ替え順序によって決まります。

  • は、周囲の$linearFill null以外の値間の値範囲に按分された、 と欠損値を埋めます。欠落しているフィールドの値を決定するために、 は以下を使用します。null$linearFill

    • 周囲のnullの値との差。

    • 周囲の値の間に入力するnullフィールドの数。

  • $linearFillnullで指定されたソート順序に従って、それらの値が先行してnull 以外の値に続く場合、 は連続する複数の$setWindowFields 値を入力できます。

    これらのドキュメントがコレクションに含まれている場合:

    { index: 0, value: 0 },
    { index: 1, value: null },
    { index: 2, value: null },
    { index: 3, value: null },
    { index: 4, value: 10 }

    $linearFillを使用してnull の値を入力すると、ドキュメントは次のようになります。

    { index: 0, value: 0 },
    { index: 1, value: 2.5 },
    { index: 2, value: 5 },
    { index: 3, value: 7.5 },
    { index: 4, value: 10 }

    完全な例については、「例 」を参照してください。

  • null nullの値が先行せず、その後に続く値はnullのままになります。

線形補間 を使用して欠落しているフィールド値を埋め込むには、以下を使用します。

このページの例では、1 つの会社の株価を時間単位で追跡するstockコレクションを使用します。

db.stock.insertMany( [
{
time: ISODate("2021-03-08T09:00:00.000Z"),
price: 500
},
{
time: ISODate("2021-03-08T10:00:00.000Z"),
},
{
time: ISODate("2021-03-08T11:00:00.000Z"),
price: 515
},
{
time: ISODate("2021-03-08T12:00:00.000Z")
},
{
time: ISODate("2021-03-08T13:00:00.000Z")
},
{
time: ISODate("2021-03-08T14:00:00.000Z"),
price: 485
}
] )

コレクション内の一部のドキュメントでpriceフィールドが欠落しています。

線形補間を使用して欠落しているprice 値を入力するには、 ステージ内で $linearFill$setWindowFieldsを使用します。

db.stock.aggregate( [
{
$setWindowFields:
{
sortBy: { time: 1 },
output:
{
price: { $linearFill: "$price" }
}
}
}
] )

この例では、次のことが行われます。

  • sortBy: { time: 1 } は、ドキュメントをtimeフィールドで最初から最新の順に昇順でソートします。

  • 出力は以下を指定します。

    • price 欠落値を入力するフィールドとして。

    • { $linearFill: "$price" } 欠落しているフィールドの値として 。$linearFill priceは、シーケンス内の周囲のprice 値に基づき、線形補間を使用して欠落している 値を埋めます。

出力例:

[
{
_id: ObjectId("620ad555394d47411658b5ef"),
time: ISODate("2021-03-08T09:00:00.000Z"),
price: 500
},
{
_id: ObjectId("620ad555394d47411658b5f0"),
time: ISODate("2021-03-08T10:00:00.000Z"),
price: 507.5
},
{
_id: ObjectId("620ad555394d47411658b5f1"),
time: ISODate("2021-03-08T11:00:00.000Z"),
price: 515
},
{
_id: ObjectId("620ad555394d47411658b5f2"),
time: ISODate("2021-03-08T12:00:00.000Z"),
price: 505
},
{
_id: ObjectId("620ad555394d47411658b5f3"),
time: ISODate("2021-03-08T13:00:00.000Z"),
price: 495
},
{
_id: ObjectId("620ad555394d47411658b5f4"),
time: ISODate("2021-03-08T14:00:00.000Z"),
price: 485
}
]

$setWindowFieldsステージを使用して欠落値を入力する場合、入力フィールドとは異なるフィールドに値を設定できます。 その結果、単一の$setWindowFieldsステージで複数の入力メソッドを使用して、結果を個別のフィールドに出力できます。

次のパイプラインは、price 線形補間 を使用して欠落している フィールドを入力します および last-observation-caled-forward メソッド。

db.stock.aggregate( [
{
$setWindowFields:
{
sortBy: { time: 1 },
output:
{
linearFillPrice: { $linearFill: "$price" },
locfPrice: { $locf: "$price" }
}
}
}
] )

この例では、次のことが行われます。

  • sortBy: { time: 1 } は、ドキュメントをtimeフィールドで最初から最新の順に昇順でソートします。

  • 出力は以下を指定します。

    • linearFillPrice 入力するターゲット フィールドとして を使用します。

      • { $linearFill: "$price" } は、linearFillPrice フィールドの値です。$linearFill priceは、シーケンス内の周囲のprice 値に基づき、線形補間を使用して欠落している 値を埋めます。
    • locfPrice 入力するターゲット フィールドとして を使用します。

      • { $locf: "$price" } は、 locfPriceフィールドの値です。 locfは、転送された最後の観察を示します。 $locfは、欠落しているprice値をシーケンス内の前のドキュメントの値で埋めます。

出力例:

[
{
_id: ObjectId("620ad555394d47411658b5ef"),
time: ISODate("2021-03-08T09:00:00.000Z"),
price: 500,
linearFillPrice: 500,
locfPrice: 500
},
{
_id: ObjectId("620ad555394d47411658b5f0"),
time: ISODate("2021-03-08T10:00:00.000Z"),
linearFillPrice: 507.5,
locfPrice: 500
},
{
_id: ObjectId("620ad555394d47411658b5f1"),
time: ISODate("2021-03-08T11:00:00.000Z"),
price: 515,
linearFillPrice: 515,
locfPrice: 515
},
{
_id: ObjectId("620ad555394d47411658b5f2"),
time: ISODate("2021-03-08T12:00:00.000Z"),
linearFillPrice: 505,
locfPrice: 515
},
{
_id: ObjectId("620ad555394d47411658b5f3"),
time: ISODate("2021-03-08T13:00:00.000Z"),
linearFillPrice: 495,
locfPrice: 515
},
{
_id: ObjectId("620ad555394d47411658b5f4"),
time: ISODate("2021-03-08T14:00:00.000Z"),
price: 485,
linearFillPrice: 485,
locfPrice: 485
}
]
このページを評価