$max
定义
$max
如果 指定值
$max
大于 字段的当前值, 操作符会将字段值更新为指定值。$max
操作符可以使用 BSON比较顺序来比较不同类型的值。$max
操作符表达式的形式为:{ $max: { <field1>: <value1>, ... } } 要在嵌入式文档或数组中指定
<field>
,请使用点符号。
行为
从 MongoDB 5.0 开始,更新操作符按字典顺序处理具有基于字符串的名称的文档字段。具有数字名称的字段按数字顺序处理。详情请参阅更新操作符行为。
如果该字段不存在,$max
操作符会将字段设置为指定值。
从 MongoDB 5.0 开始,使用带空操作数表达式 ({ }
) 的更新操作符(如 $max
)时,mongod
不会再引发错误。空更新不会导致任何变化,也不会创建 oplog 条目(意味着该操作为“无操作”)。
示例
使用$max
比较数字
创建 scores
集合:
db.scores.insertOne( { _id: 1, highScore: 800, lowScore: 200 } )
文档的 highScore
当前值为 800。操作如下:
将
highscore
800 与指定值 950 进行比较将
highScore
更新为 950,因为 950 大于 800
db.scores.updateOne( { _id: 1 }, { $max: { highScore: 950 } } )
现在,scores
集合包含以下修改后的文件:
{ _id: 1, highScore: 950, lowScore: 200 }
下一个操作无效,因为 highScore
的值 950 大于 870:
db.scores.updateOne( { _id: 1 }, { $max: { highScore: 870 } } )
文档在 scores
集合中保持不变:
{ _id: 1, highScore: 950, lowScore: 200 }
使用$max
比较日期
创建 tags
集合:
db.tags.insertOne( { _id: 1, desc: "crafts", dateEntered: ISODate("2013-10-01T05:00:00Z"), dateExpired: ISODate("2013-10-01T16:38:16.163Z") } )
以下操作将 dateExpired
字段的当前值 ISODate("2013-10-01T16:38:16.163Z")
与指定日期 new Date("2013-09-30")
进行比较,确定是否更新该字段:
db.tags.updateOne( { _id: 1 }, { $max: { dateExpired: new Date("2013-09-30") } } )
new Date("2013-09-30")
不是最新日期,因此该操作不会更新 dateExpired
字段:
{ _id: 1, desc: "decorative arts", dateEntered: ISODate("2013-10-01T05:00:00Z"), dateExpired: ISODate("2013-10-01T16:38:16.163Z") }