拾光记录
218个文档 导航 作者 Gitee
随笔记录4
Hexo博客:基础使用Hexo博客:Next主题Hexo博客:Next进阶使用Hexo博客:Next高级配置
前端知识4
基础知识17
Vue框架19
UniApp14
微信小程序1
Java编程6
Java基础15
SpringBoot31
SpringMVC18
MyBatis9
SpringCloud15
中间件2
数据库4
MySQL13
Redis8
MongoDB10
其他数据库1
Python编程6
Python基础知识Python语法yolo目标检测OpenCV的使用及树莓派平台condauv管理工具
Linux12
Linux常用命令Jar启动脚本VirtualBox安装CentOSVirtualBox安装Ubuntu树莓派安装及使用frp内网穿透ArchLinux:基础系统安装ArchLInux:图形化界面安装ArchLinux:常用软件ArchLinux:深度优化ArchLinux:NiriArchLinux:模块记录
软件工具12
IDEAGitMavenGradleNginx安装Nginx配置JMeter压测OllamaRustFSPicGoVSCodeDocker
创意设计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插入,有不做操作时间更新示例内嵌数组操作