栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

我们如何使用Spring Boot为MongoDB创建自动生成的字段

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我们如何使用Spring Boot为MongoDB创建自动生成的字段

MongoDB具备所有复杂的ObjectId生成功能,但是通常您只是从关系数据库中跳了出来,而且您仍然想要一个易于读取/交流的数字标识符字段,该字段在每次插入新记录时都会自动递增。

MongoDB教程中的一项巧妙建议是使用一个计数器集合,该计数器集合以“ counter name”作为其ID,并使用“
seq”字段存储最后使用的数字。

当使用Spring Data MongoDB开发时,这个巧妙的技巧可以写成一个简单的服务。在这里,我使用集合名称作为计数器名称,因此很容易猜测/记住。

import static org.springframework.data.mongodb.core.FindAndModifyOptions.options;import static org.springframework.data.mongodb.core.query.Criteria.where;import static org.springframework.data.mongodb.core.query.Query.query;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.mongodb.core.MongoOperations;import org.springframework.data.mongodb.core.query.Update;import org.springframework.stereotype.Service;import com.model.CustomSequences;@Servicepublic class NextSequenceService {    @Autowired private MongoOperations mongo;    public int getNextSequence(String seqName)    {        CustomSequences counter = mongo.findAndModify( query(where("_id").is(seqName)), new Update().inc("seq",1), options().returnNew(true).upsert(true), CustomSequences.class);        return counter.getSeq();    }}

CustomSequences只是表示集合的简单类。请注意int数据类型的使用,这将限制为2 ^ 31个条目的最大值。

import org.springframework.data.annotation.Id;import org.springframework.data.mongodb.core.mapping.document;@document(collection = "customSequences")public class CustomSequences {    @Id    private String id;    private int seq;// getters and setters}

然后,在插入新条目时(借助Spring MongoDB Repository支持),只需在保存之前像这样设置id字段

baseQuestion baseQuestion = new baseQuestion();baseQuestion.setQuestionId(nextSequenceService.getNextSequence("customSequences"));baseQuestionRepository.save(baseQuestion);

如果您不喜欢这种方式,则需要使用MongoDBEvents并使用与上述相同的方法使用onBeforeConvert来生成自动值。

同样上述方法也是线程安全的,因为findAndModify()是线程安全的原子方法



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/383238.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号