logo 范 · 拾光录
网址收集 关于作者 Github Gitee
杂文随笔4
Hexo博客:基础使用Hexo博客:Next主题Hexo博客:Next进阶使用Hexo博客:Next高级配置
前端编程3
前端基础知识16
UniApp15
Vue框架19
Java编程7
Java基础知识14
SpringBoot31
SpringMVC14
MyBatis8
SpringCloud15
RocketMQ1
MyCat1
数据库4
MySQL6
Redis7
MongoDB10
H21
Java技术栈4
知识整理分布式锁的实现方案MySQL事务MySQL的锁
软件工具箱14
IDEAGitMavenGradleNginx安装Nginx配置JMeter压测OllamaPicGoRustFSVSCodeDockerObsidianObs录制
Linux知识11
树莓派安装及使用ArchLinux:常用软件ArchLinux:基础系统安装ArchLinux:深度优化ArchLInux:图形化界面安装ArchLinux:Nirifrp内网穿透Jar启动脚本Linux常用命令VirtualBox安装CentOSVirtualBox安装Ubuntu
Python编程6
Python基础知识Python语法yolo目标检测OpenCV的使用及树莓派平台condauv
创意设计2
Blender:入门知识UI设计基础知识
AI相关9
Claude CodeHermes AgentOpenAI基本使用OpenAI工具调用OpenAI记忆管理OpenAI推理执行OpenAI开发框架Langchainllama.cpp

更新值 $set

update.set("title", title);

加法/减法

//相当于number=number+1
update.inc("number", 1);

//相当于number=number-1
update.inc("number", -1);

乘法

//相当于sum=sum*100
update.multiply("sum", 100)	

没有key插入,有不做操作

$setOnInsert

update.setOnInsert("createDate", currentDate);

如果update的更新参数upsert:true,也就是如果要更新的文档不存在的话会插入一条新的记录,$setOnInsert操作符会将指定的值赋值给指定的字段,如果要更新的文档存在那么$setOnInsert操作符不做任何处理

时间更新

update.currentDate("updateDate");

$currentDate操作符是只用在更新操作上,不可以用在insert操作,更新日期类型的字段时建议使用$currentDate操作符,因为它是直接取的数据库服务端的时间,而使用new Date()设置日期取的是当前服务器上的时间,容易造成误差

示例

Query query = new Query();
query.addCriteria(where("keyword").is(keyword).and("app_no").is(Constant.APP_NO));
Update update = new Update();
update.inc("number", 1);
update.currentDate("updateDate");
update.setOnInsert("createDate", new Date());
mongoTemplate.findAndModify(query, update, FindAndModifyOptions.options().upsert(true), SearchKeyword.class);

内嵌数组操作

$push

添加指定数据到数组中 
update.push("process", process);
update.push("lawPeopleMedias").each(lawPeopleMedias);

$pushAll

添加指定多个数据到数组中 
同 $push

文档中数组操作-增删改

// 操作类型:默认0-全局数组保存、1-原数组中追加后面数组multiMediaList、2-数组中删除所传multiMediaList、3-根据name修改
int handleType = Integer.parseInt(oBody.getOrDefault("handleType", "0").toString());
String shopId = oBody.getString("shopId"); // 店铺id
JSONArray array = oBody.getJSONArray("cameraList");
List<MultiMedia> cameraArray = GsonUtil.jsonToList(array.toString(), MultiMedia.class);
Criteria criteria = Criteria.where("_id").is(new ObjectId(shopId)).and("uid").is(new ObjectId(user.getId()));
Update update = new Update();
if (handleType == 1) {
    update.push("camera", cameraArray.get(0));
} else if (handleType == 2) {
    update.pull("camera", cameraArray.get(0));
} else if (handleType == 3) {
    criteria.and("camera.content").is(cameraArray.get(0).getContent());
    update.set("camera.$.name", cameraArray.get(0).getName());
    update.set("camera.$.cover", cameraArray.get(0).getCover());
} else {
    update.set("camera", cameraArray);
}
UpdateResult updateResult = mongoTemplate.updateFirst(new Query(criteria), update, Shop.COLLECTION_NAME);
Assert.isTrue(updateResult.getMatchedCount() > 0, "您无权限修改该店铺!");

注意:同一文档中的数据无法批量

更新值 $set
加法/减法
乘法
没有key插入,有不做操作
时间更新
示例
内嵌数组操作