首页 > 解决方案 > Spring Mongo 更新日期检查 - 如何防止重复键异常?

问题描述

我需要保留具有给定时间戳的文档。我只想保留/更新具有较新时间戳的文档。

通过将日期检查添加到 upsert 查询中,如果现有文档比要持久化的文档更新,我将始终得到重复键异常:

public void checkTimestampAndSave(BaseDocument object) {
    Query query = new Query();
    query.addCriteria(Criteria.where("_id").is(object.getId()).and("_ts").lte(object.getUpdateDate()));
    Document document = new Document();
    mappingMongoConverter.write(object, document);
    try {
        mongoTemplate.upsert(query, Update.fromDocument(document), object.getClass());
    } catch (DuplicateKeyException ignored) {
        //:-(
        log.debug("Object has an updateDate less than the persisted object in db");
    }
}

我真的不喜欢在这里依赖异常。

有没有办法 - 可以使用 AggregationUpdate 来防止异常?upsert 查询应该只包含 id(以判断是更新还是插入),更新本身应该设置一些东西(如果更新)或者什么都不做。

在 mongo“语言”中看到一种方式也将有所帮助,我将尝试将其翻译成 Spring/Java API。

标签: springmongodbmongodb-queryspring-data-mongodb

解决方案


推荐阅读