java - 为什么我无法使用 mongoTemplate.remove 删除数据

标签 java mongodb

我使用了java spring-boot版本1.5.14.RELEASE并且spring-data-mongodb版本是1.10 .13-发布。我正在尝试进行数据归档。

我会通过beginIdendId找到主库MongoDB中的数据,然后将数据同步到其他库中,最后通过删除主库数据>beginIdendId

public int del(ObjectId beginId, ObjectId endId, String collectionName) {

    Criteria criteria = getCriteria(beginId, endId);
    WriteResult writeResult = mongoTemplate.remove(Query.query(criteria), collectionName);
    return writeResult.getN();
}

private Criteria getCriteria(ObjectId beginId, ObjectId endId) {
    Date endDate = DateUils.getDayEnd(endId.getDate());
    Criteria criteria = Criteria.where("_id").lte(endId);
    if (beginId != null) {
      criteria.gte(beginId);
    }
    criteria.and("updateTime").lte(endDate);
    return criteria;
}

有时,数据删除失败,导致下次备份时出现 DuplicateKeyException

最佳答案

不要使用静态 Criteria 函数,而是使用 Criteria 类对象:

private Criteria getCriteria(ObjectId beginId, ObjectId endId) {
    Date endDate = DateUils.getDayEnd(endId.getDate());
    Criteria criteria = new Criteria();        
    if (beginId != null) {
      criteria.and("_id").lte(endId).gte(beginId);
    } else {
      criteria.and("_id").lte(endId);
    }
    criteria.and("updateTime").lte(endDate);
    return criteria;
}

关于java - 为什么我无法使用 mongoTemplate.remove 删除数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57800356/

相关文章:

Java 在 `finally` block 后不打印消息

java - JPA - 从 OneToMany 关系中删除一个 child

java - 尝试从 COM 端口读取会使 JVM 崩溃

node.js - 如何使用 Mongoose 和 Node 检索前 5 个结果和总计数?

javascript - 将一天中的时间保存为 mongodb 中的数字,但以人类格式显示(使用 meteor 自动格式)

javascript - 如何使用 MongoDB 更改数组的顺序?

c# - 身份服务器 4 - 停用发现端点

python - python 中的 mongodb 列约束,如 ruby​​ mongoid

JavaFX SpringBoot SpringJDBC SQLite CRUD 应用程序 - 配置

java - Jenkins 蓝海 : Maven doesn't see Java