Mongodb用String自定义ID
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,本篇内容主要讲解"Mongodb用String自定义ID",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Mongodb用String自定义ID"吧!impo
千家信息网最后更新 2025年12月01日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安全错误
数据库的锁怎样保障安全
网络技术兵
苏州阿里云服务器价格排行
软件开发项目中的分工
河南网络安全法处罚裁量标准
租个服务器开网站
宏达新材网络安全
创建数据源连接数据库失败
小学生网络安全专题知识竞赛
一加8数据库小白测评
如何指定上网服务器
网络安全协议的核心功能
中储粮集团软件开发人员外派
电子信息和网络安全哪个好
免费自动proxy服务器
软件开发越学越难吗
全国出版社数据库
数据库中的文件在哪里找
阿里大服务器有什么优势
何谓主动连接服务器
互联网金融科技本质
可靠的软件开发培训班
网络安全规章制度敏感词汇
达梦数据库关闭表头
放开那三国橙卡武将数据库
无法显示mysql数据库
挑战杯ips竞赛网络安全
网络安全审查员证书要求
计算机软件开发有没用
何谓主动连接服务器
质押挖矿智能合约软件开发