当前位置: 首页 > news >正文

MongoDB数据更新大之大与小中小

学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第56篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。

数据更新中,往往要应对比较更新的场景。现在很多人喜欢跑步,规律跑步,心脏功能增强会让静息心率(就是深睡时的心率)下降。而在参加强度训练时,心率可能会突破历史最高心率,达到新的高度。但这种训练很危险 ,需要专业的训练计划,不要轻易尝试。在这样的场景中,每次更新的时候,需要与已有数值进行比较。当新数值比已有范围更大或更小时,才会更新。

Mongodb提供了$min, $max方法 ,在一个原子事务中实现数据比较和更新。

定义

操作符$min,更新指定字段值。当新值小于当前字段值时,更新数据。$min支持不同类型的数据比较。

操作符$max,更新指定字段值。当新值大于当前字段值时,更新数据。$max支持不同类型的数据比较。

语法

{$min: {<field1>: <value1>, ...}}
{$max: {<field1>: <value1>, ...}}

当更新字段在嵌入式文档类型或数组时,使用点操作符。

行为

从mongodb5.0开始,更新操作的顺序按照文档字段名的字母表顺序执行。带有数字名称的字段,按照数字顺序更新。

当字段不存在时,$min, $max操作符插入新字段并将字段设置为指定字段。

Mongodb依据BSON比较顺序,比较不同类型的数据大小。

mongodb 5.0版本以后,向$max,$min传入空表达式({ })时,mongodb不再抛出错误。空表达式不会修改字段值 ,也不会在oplog中,添加新的操作记录。

应用

创建集合scores并插入数据

db.scores.insertOne({ _id: 1, highScore: 800, lowScore:200})

文档中字段lowScore值是200, 下面的语句,将字段值更新为150。因为150小于200,所以更新成功。

db.scores.updateOne({_id: 1}, {$min: {lowScore: 150}})

下面的语句,将字段lowScore的值更新为250,因为250大于150,所以数据不会更新

db.scores.updateOne({_id: 1}, {$min: {lowScore: 250}})

下面的语句,将字段highScore更新为950,因为950大于800,所以数据更新成功

db.scores.updateOne({_id: 1}, {$max: {highScore: 950}})

下面的语句,将字段highScore更新为870,因为870小于950,所以数据不会更新

db.scores.updateOne({_id: 1}, {$max: {highScore: 870}})

创建tags集合,并插入数据

db.tags.insertOne({_id: 1,desc: "crafts",dateEntered: ISODate("2013-10-01T05:00:00Z"),dateExpired: ISODate("2013-10-01T16:38:16Z")
})

使用$min更新字段dateEntered。2013-09-25小于2013-10-01,更新成功

db.tags.updateOne({_id: 1},{ $min: { dateEntered: new Date("2013-09-25")}}
)

使用$max更新字段dateExpired,2013-09-30小于2013-10-01,因此数据不会更新

db.tags.updateOne({_id: 1}, { $max: { dateExpired: new Date("2013-09-30")}}
)

http://www.lryc.cn/news/333796.html

相关文章:

  • C语言开发实战:使用EasyX在Visual Studio 2022中创建井字棋游戏
  • Android与RN远程过程调用的原理
  • MySQL-主从复制:概述、原理、同步数据一致性问题、搭建流程
  • 论文阅读《Semantic Prompt for Few-Shot Image Recognition》
  • Linux初学(十七)docker
  • Python---Numpy线性代数
  • react+ echarts 轮播饼图
  • 政安晨:【深度学习神经网络基础】(三)—— 激活函数
  • 使用tomcat里的API - servlet 写动态网页
  • 从0到1搭建文档库——sphinx + git + read the docs
  • EasyExcel 校验后导入
  • 【星计划★C语言】c语言初相识:探索编程之路
  • 搜维尔科技:借助 ARVR 的力量缩小现代制造业的技能差距
  • 数据结构之栈和队列
  • centos安装使用elasticsearch
  • 4.7学习总结
  • 自定义gitlog格式
  • Redission--分布式锁
  • 非关系型数据库(缓存数据库)redis的集群
  • MySQL:表的约束(上)
  • 树莓派5使用体验
  • 代码随想录算法训练营第42天| 背包问题、416. 分割等和子集
  • Node.js安装及环境配置指南
  • 【Java基础】面试题汇总
  • 数据库事务的超级详细讲解,包括事务特性、事务隔离级别、MVCC(多版本并发控制)
  • 鸿蒙Lottie动画-实现控制动画的播放、暂停、倍速播放、播放顺序
  • C++面试100问与自动驾驶100问
  • 加速 Redis 操作:掌握管道技术提升性能与效率
  • 深入浅出 -- 系统架构之分布式系统底层的一致性
  • idea Springboot 电影推荐系统LayUI框架开发协同过滤算法web结构java编程计算机网页