// Basic examples for $min/$max var res; var coll = db.update_min_max; coll.drop(); // $min for number coll.insert({_id: 1, a: 2}); res = coll.update({_id: 1}, {$min: {a: 1}}); assert.writeOK(res); assert.eq(coll.findOne({_id: 1}).a, 1); // $max for number coll.insert({_id: 2, a: 2}); res = coll.update({_id: 2}, {$max: {a: 1}}); assert.writeOK(res); assert.eq(coll.findOne({_id: 2}).a, 2); // $min for Date coll.insert({_id: 3, a: new Date()}); var origDoc = coll.findOne({_id: 3}); sleep(2); res = coll.update({_id: 3}, {$min: {a: new Date()}}); assert.writeOK(res); assert.eq(coll.findOne({_id: 3}).a, origDoc.a); // $max for Date coll.insert({_id: 4, a: new Date()}); sleep(2); var newDate = new Date(); res = coll.update({_id: 4}, {$max: {a: newDate}}); assert.writeOK(res); assert.eq(coll.findOne({_id: 4}).a, newDate); // $max for small number coll.insert({_id: 5, a: 1e-15}); // Slightly bigger than 1e-15. var biggerval = 0.000000000000001000000000000001; res = coll.update({_id: 5}, {$max: {a: biggerval}}); assert.writeOK(res); assert.eq(coll.findOne({_id: 5}).a, biggerval); // $min for a small number coll.insert({_id: 6, a: biggerval}); res = coll.update({_id: 6}, {$min: {a: 1e-15}}); assert.writeOK(res); assert.eq(coll.findOne({_id: 6}).a, 1e-15); // $max with positional operator var insertdoc = {_id: 7, y: [{a: 2}, {a: 6}, {a: [9, 1, 1]}]}; coll.insert(insertdoc); res = coll.update({_id: 7, "y.a": 6}, {$max: {"y.$.a": 7}}); assert.writeOK(res); insertdoc.y[1].a = 7; assert.docEq(coll.findOne({_id: 7}), insertdoc); // $min with positional operator insertdoc = { _id: 8, y: [{a: 2}, {a: 6}, {a: [9, 1, 1]}] }; coll.insert(insertdoc); res = coll.update({_id: 8, "y.a": 6}, {$min: {"y.$.a": 5}}); assert.writeOK(res); insertdoc.y[1].a = 5; assert.docEq(coll.findOne({_id: 8}), insertdoc);