spring - 查找具有最大 semver 版本的对象

标签 spring mongodb spring-data criteria spring-data-mongodb

假设我在 MongoDB 中有一些文档,带有 version属性(semver 版本),例如类似 { ..., version: { major: 1, minor: 2, patch: 13 } } , 或 { ..., version: "1.2.13" } ,我还没有决定我将使用哪种格式。
我需要找到最高version的文档.
例如,如果集合有两个文档 {..., version: "0.10.0"}{..., version: "1.0.0"}然后我想用 version = "1.0.0" 获取文档
我正在使用 Spring Data MongoDB,所以理想情况下我想通过使用 Criteria API 找到一些解决方案

最佳答案

当我使用 version 的第一种格式时,结果很简单:{ ..., version: { major: 1, minor: 2, patch: 13 } }然后我可以按所有这三个字段排序并获取一个顶级文档:

db.metadata.find({})
   .projection({})
   .sort({ "version.major": -1, "version.minor": -1, "version.patch": -1 })
   .limit(1)
此查询使用 Criteria API 编写:
public Metadata getLatestMetadata() {
    Criteria criteria = Criteria
            .where("type").is(TEST_TYPE);

    Query query = Query.query(criteria).with(getVersionSort()).limit(1);
    return mongoOperations.findOne(query, Metadata.class);
}

private Sort getVersionSort() {
    return Sort.by(new Sort.Order(Sort.Direction.DESC, "version.major"),
            new Sort.Order(Sort.Direction.DESC, "version.minor"),
            new Sort.Order(Sort.Direction.DESC, "version.patch"));
}

关于spring - 查找具有最大 semver 版本的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63410228/

相关文章:

Spring批量多线程: throttle-limit impact

node.js - Mongodb 从集合中选择随机查询,除了少数 id

java - Spring Boot 数据休息 JPA : @ManyToOne not populating the ForeignKey column in DB

java - 部署一个基于 Spring 的 WAR,其 JAR 依赖项已外部化

java - 严重 : Exception org. springframework.web.util.Log4jConfigListener

mongodb - Mongoid:检索其 _id 存在于另一个集合中的文档

Mongodb 分片 - 没有这样的命令 : 'addShard'

java - 将 date 和 int 的数量与 JPA 规范中的 date 进行比较

javax.persistence 不包含在 spring 数据 jpa 中?

java - Spring Boot从1.5迁移到2.1, hibernate 错误