MongoDBには$min
があります 指定された値がフィールドの現在の値よりも小さい場合にのみ、フィールドの値を更新できる演算子。
つまり、$min
の場合 値がドキュメントの現在の値である$min
よりも小さい 値が使用されます。それ以外の場合、ドキュメントの値は変更されません。
例
golf
というコレクションがあるとします。 次のドキュメントで:
{ "_id" : 1, "strokes" : 70 }
そして、ゴルフの各ゲームの後に最新のスコアでドキュメントを更新すると想像してください。この場合、strokes
のみが必要になります 最新のスコアが低かった場合に更新されるフィールド 以前のスコアより。
この場合、$min
を使用できます その結果を達成するためのオペレーター。
例:
db.golf.update(
{ _id: 1 },
{ $min: { strokes: 64 } }
)
出力:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
このメッセージは、1つのドキュメントが一致して更新されたことを示しています。
コレクションをもう一度確認しましょう。
db.golf.find()
結果:
{ "_id" : 1, "strokes" : 64 }
strokes
がわかります フィールドが新しい値で更新されました。これは、64が以前の値である70よりも低いためです。
値が高い場合
$min
で指定された値の場合 ドキュメント内の既存の値よりも高い場合、何も更新されません。
例:
db.golf.update(
{ _id: 1 },
{ $min: { strokes: 72 } }
)
出力:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
メッセージから、何も更新されていないことがわかります。
コレクションをもう一度確認しましょう。
db.golf.find()
結果:
{ "_id" : 1, "strokes" : 64 }
72に更新しようとしても、値は64のままであることがわかります。これは、$min
を使用したために予想されます。 。
日付
$min
を使用できます 日付フィールド。
collection
があるとします。 次の文書で種と呼ばれる:
{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") }
ドキュメントの現在の日付より後の日付で日付を更新してみましょう。
db.species.update(
{ _id: 1 },
{ $min: { firstDiscovered: new Date("2001-01-01") } }
)
ここでは、2000
から年を更新しようとしています 2001
へ 。新しい日付が既存の日付よりも遅い場合、次のようになります。
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
何も更新されませんでした。
コレクションを確認しましょう:
db.species.find()
結果:
{ "_id" : 1, "firstDiscovered" : ISODate("2000-01-01T00:00:00Z") }
予想どおり、同じ日付値が残ります。
それでは、もっと早い日付で更新してみましょう。
db.species.update(
{ _id: 1 },
{ $min: { firstDiscovered: new Date("1999-01-01") } }
)
出力:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
メッセージから、ドキュメントが更新されたことがわかります。
確認しましょう。
db.species.find()
結果:
{ "_id" : 1, "firstDiscovered" : ISODate("1999-01-01T00:00:00Z") }
日付は予想どおりに更新されました。