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

$locf(式 演算子)

$locf

バージョン5.2の新機能。

Last observation carried forward(LOCF)法。ウィンドウ内の null および欠落しているフィールドの値として、フィールドの最後の null 以外の値を設定します。

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

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

{ $locf: <expression> }

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

入力されているフィールドにnullと null 以外の値の両方が含まれている場合、 $locfは、$setWindowFields で指定された並べ替え順序に従って、 nullと欠損値をフィールドの最後の既知の null 以外の値に設定し 。

null 並べ替え順序 で null 以外の値の前に表示される欠落しているフィールド値はnullのままです。

入力されているフィールドにパーティション内でnullまたは欠落値のみが含まれている場合、 $locfはそのパーティションのフィールド値を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フィールドが欠落しています。

次の例では、 $locf演算子を使用して、欠落しているフィールドに最後に確認された以外のnull値の値を設定します。

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

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

  • sortBy: { time: 1 } は、各パーティション内のドキュメントを time で昇順(1)に並べ替えるので、最も古い time が最初になります。

  • priceフィールドが欠落しているドキュメントの場合、 $locf演算子はpriceをシーケンス内で最後に確認された値に設定します。

出力例:

[ { _id: ObjectId("62169b65394d47411658b5f5"), time: ISODate("2021-03-08T09:00:00.000Z"), price: 500 }, { _id: ObjectId("62169b65394d47411658b5f6"), time: ISODate("2021-03-08T10:00:00.000Z"), price: 500 }, { _id: ObjectId("62169b65394d47411658b5f7"), time: ISODate("2021-03-08T11:00:00.000Z"), price: 515 }, { _id: ObjectId("62169b65394d47411658b5f8"), time: ISODate("2021-03-08T12:00:00.000Z"), price: 515 }, { _id: ObjectId("62169b65394d47411658b5f9"), time: ISODate("2021-03-08T13:00:00.000Z"), price: 515 }, { _id: ObjectId("62169b65394d47411658b5fa"), time: ISODate("2021-03-08T14:00:00.000Z"), price: 485 }]

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

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

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 }]
このページを評価