Mongodb用String自定义ID
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,本篇内容主要讲解"Mongodb用String自定义ID",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Mongodb用String自定义ID"吧!impo
千家信息网最后更新 2025年02月03日Mongodb用String自定义ID
本篇内容主要讲解"Mongodb用String自定义ID",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Mongodb用String自定义ID"吧!
import org.bson.Document;import org.bson.types.ObjectId;import org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener;import org.springframework.data.mongodb.core.mapping.event.BeforeConvertEvent;import org.springframework.data.mongodb.core.mapping.event.BeforeSaveEvent;import org.springframework.stereotype.Component;@Componentpublic class BeforeConvertListener extends AbstractMongoEventListener
通过监听器 , 保存的时候,把 ObjectId 类型的id都转成 Stirng, 如果是空的,就自己加一个String类型的id.
But 有一个问题, 查询,或者删除的时候, 如果String 字符串是一个合法的 ObjectId 的形式。 Spring Data Mongo 会自动转成 ObjectId 去查询或删除。
这样就找不到记录了。
https://stackoverflow.com/questions/14329175/prevent-spring-data-for-mongo-to-convert-ids-to-objectid
这里介绍的一个方式是 抛异常, 还没试过。 看着抛异常就不太想用。
public class CustomMongoConverter extends MappingMongoConverter { public CustomMongoConverter(MongoDbFactory mongoDbFactory, MappingContext extends MongoPersistentEntity>, MongoPersistentProperty> mappingContext) { super(mongoDbFactory, mappingContext); conversionService.addConverter(new Converter() { @Override public ObjectId convert(String source) { throw new RuntimeException(); } }); }}
还没结束, 估计要放弃的节奏,就用 ObjectId 当主键。
import cn.hutool.core.lang.UUID;import cn.hutool.core.util.StrUtil;import org.bson.Document; import org.bson.types.ObjectId; import org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener; import org.springframework.data.mongodb.core.mapping.event.BeforeConvertEvent; import org.springframework.data.mongodb.core.mapping.event.BeforeSaveEvent; import org.springframework.stereotype.Component;@Componentpublic class BeforeConvertListener extends AbstractMongoEventListener{ @Override public void onBeforeSave(BeforeSaveEvent event) { Document d = event.getDocument(); if(d==null){ //不太可能 return; } Object _id = d.get("_id"); if (_id == null) { event.getDocument().put("_id", UUID.fastUUID().toString()/*StrUtil.reverse(new ObjectId().toString())*/); } else if (_id instanceof ObjectId) { event.getDocument().put("_id", UUID.fastUUID().toString()/* StrUtil.reverse(_id.toString())*/); } }}
之前一个项目用了 ObjectId ,感觉没啥用。 还容易出错。 比如前台传的String, 查询的时候忘记转为 ObjectId了...
最后,反正是不用 ObjectId了, 只要 String 不符合 ObjectId spring 就不会自动转换, 建议就用 UUID字符串 替代。这样查询删除也没问题。
或者加一个字符串,改变长度就行。
Object _id = d.get("_id"); if (_id == null) { event.getDocument().put("_id", new ObjectId().toString()+"c"); } else if (_id instanceof ObjectId) { event.getDocument().put("_id", _id.toString()+"c"); }
debug看一下, 他这个转换的判断逻辑是啥,
判断逻辑就是是不是合法的 ObjectId.
到此,相信大家对"Mongodb用String自定义ID"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
查询
字符
字符串
时候
合法
内容
类型
逻辑
问题
学习
实用
更深
不用
兴趣
前台
实用性
实际
就是
建议
形式
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库专业工资
玉溪迈硕互联网科技公司
.dbi 数据库
360网络安全是中国第一吗
800公里要进几个服务器
阿里云数据怎么传到服务器
服务器内存dimm
福米科技在长沙互联网公司排名
江西网络安全中心
江苏互联网软件开发价格
网络技术应用的信道
安全角度数据库备份周期规定
网络安全概念与技术
什么是网站数据库文件
数据库只在参数变化时做记录
极客网络安全技能挑战赛
在网络环境下数据库的安全
罗汉琛 cba数据库
网络安全员责任制度
cscd科学引文数据库
昆山运营网络技术哪家便宜
因特网科技互联网大赛
胜利欧赔数据库
国家推动建设的网络安全体系
数据库技术哪家好
学网络安全将来从事什么行业
华硕服务器主板报错b7
汕头市网络安全10月13日
软件开发it那个就业方向好
excel找保存前数据库