sql >> データベース >  >> NoSQL >> MongoDB

MongoDB $ max

    MongoDBには$maxがあります 指定された値がフィールドの現在の値よりも大きい場合にのみ、フィールドの値を更新できる演算子。

    つまり、$maxの場合 値がドキュメントの現在の値である$maxよりも大きい 値が使用されます。それ以外の場合、ドキュメントの値は変更されません。

    次のようなコレクションがあるとします。

    { "_id" : 1, "exercise" : "deadlift", "bestLift" : 230 }
    { "_id" : 2, "exercise" : "benchpress", "bestLift" : 100 }
    { "_id" : 3, "exercise" : "squat", "bestLift" : 210 }

    そして、最新のリフトなしで各トレーニングの後にコレクションを更新すると想像してください。この場合、bestLiftのみが必要になります 最新のリフトが以前の最高のリフト(つまり、それぞれのリフトにリストされている現在の重量)よりも重い場合に更新されるフィールド。

    この場合、$maxを使用できます その結果を達成するためのオペレーター。

    例:

    db.workout.update( 
      { _id: 1 }, 
      { $max: { bestLift: 240 } } 
    )

    出力:

    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

    このメッセージは、1つのドキュメントが一致して更新されたことを示しています。

    コレクションをもう一度確認しましょう。

    db.workout.find()

    結果:

    { "_id" : 1, "exercise" : "deadlift", "bestLift" : 240 }
    { "_id" : 2, "exercise" : "benchpress", "bestLift" : 100 }
    { "_id" : 3, "exercise" : "squat", "bestLift" : 210 }

    bestLift 最初のドキュメントのフィールドが新しい値で更新されました。これは、240が以前の値である230よりも高いためです。

    値が低い場合

    $maxで指定された値の場合 ドキュメント内の既存の値よりも低い場合、何も更新されません。

    例:

    db.workout.update( 
      { _id: 1 }, 
      { $max: { bestLift: 220 } } 
    )

    出力:

    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

    メッセージから、何も更新されていないことがわかります。

    コレクションをもう一度確認しましょう。

    db.workout.find()

    結果:

    { "_id" : 1, "exercise" : "deadlift", "bestLift" : 240 }
    { "_id" : 2, "exercise" : "benchpress", "bestLift" : 100 }
    { "_id" : 3, "exercise" : "squat", "bestLift" : 210 }

    220に更新しようとしても、値は240のままであることがわかります。これは、$maxを使用したため、予想されます。 。

    日付

    $maxを使用できます 日付フィールド。

    collectionがあるとします。 次のドキュメントでサブスクリプションと呼ばれます:

    { "_id" : 1, "expiry" : ISODate("2021-01-01T00:00:00Z") } 

    ドキュメントの現在の日付よりも前の日付で日付を更新してみましょう。

    db.subscriptions.update( 
      { _id: 1 }, 
      { $max: { expiry: new Date("2020-01-01") } } 
    )

    ここでは、2021から年を更新しようとしています。 2020へ 。新しい日付が既存の日付よりも早い場合、次のようになります。

    db.subscriptions.find()

    結果:

    { "_id" : 1, "expiry" : ISODate("2021-01-01T00:00:00Z") } 

    予想どおり、何も更新されませんでした。

    後日更新してみましょう。

    db.subscriptions.update( 
      { _id: 1 }, 
      { $max: { expiry: new Date("2022-01-01") } } 
    )

    出力:

    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

    メッセージから、ドキュメントが更新されたことがわかります。

    確認しましょう。

    db.subscriptions.find()

    結果:

    { "_id" : 1, "expiry" : ISODate("2022-01-01T00:00:00Z") }

    日付は予想どおりに更新されました。


    1. MongoDBRefで$lookupする方法

    2. 反応でbase64画像を表示するにはどうすればよいですか?

    3. Redisを使用して、限られた範囲から一意のIDを生成します

    4. MongoDB:同じドキュメントのデータを使用してドキュメントを更新する