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") } 日付は予想どおりに更新されました。