问题描述
假设我在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"));
}