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

Find an object with biggest semver version

假设我在 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 数据 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"));
}