Mongodb用String自定义ID
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容主要讲解"Mongodb用String自定义ID",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Mongodb用String自定义ID"吧!impo
千家信息网最后更新 2026年11月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安全错误
数据库的锁怎样保障安全
咖啡
天津市摩尔互联网科技
疫情对互联网科技公司影响
北京互联网科技有限公司
互联网科技公司怎么样
朗涯互联网科技
深圳齐家互联网科技
苏州大垚互联网科技
隆华科技工业互联网
广州慧亚互联网科技怎么样
北京华百购互联网科技有限公司
承德科技产业互联网发展
湖北码尼互联网科技有限公司电话
区块链结合互联网科技
卡尔迅互联网科技有限公司
互联网硬科技公司
张家口科技产业互联网平台
互联网的科技体现在哪里
互联网对科技影响
网互联网络科技
上海万想互联网科技
哈尔滨新华互联网科技
农村开互联网科技讲堂
互联网教育科技公司vipkid
互联网科技项目计划书材料类
河南猎农互联网科技有限公司
语蝶互联网科技有限公司
黑云互联网科技有限公司
互联网科技大佬云集
宁波允成互联网科技有限公司