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

问题描述

假设我在MongoDB中有一些带有version属性(通用版本)的文档,例如类似{ ...,version: { major: 1,minor: 2,patch: 13 } }{ ...,version: "1.2.13" }的文档,但我还没有决定我应该使用哪种格式将使用。

我需要找到version最高的文档。
例如,如果collection具有两个{...,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"),"version.patch"));
}