Java 为什么可以';使用mongoTemplate.remove删除数据

Java 为什么可以';使用mongoTemplate.remove删除数据,java,mongodb,Java,Mongodb,我使用过javaspring bootversion1.5.14。RELEASE和spring data mongodb版本是1.10.13-RELEASE。我正在尝试做数据归档 我将通过beginId和endId查找master MongoDB中的数据,然后将数据同步到其他库中,最后,我将通过beginId和endId删除主库数据 public int del(ObjectId beginId、ObjectId endId、String collectionName){ Criteria=ge

我使用过java
spring boot
version
1.5.14。RELEASE
spring data mongodb
版本是
1.10.13-RELEASE
。我正在尝试做数据归档

我将通过
beginId
endId
查找master MongoDB中的数据,然后将数据同步到其他库中,最后,我将通过
beginId
endId
删除主库数据

public int del(ObjectId beginId、ObjectId endId、String collectionName){
Criteria=getCriteria(beginId,endId);
WriteResult WriteResult=mongoTemplate.remove(Query.Query(条件),collectionName);
返回writeResult.getN();
}
私有条件getCriteria(ObjectId beginId、ObjectId endId){
Date endDate=DateUils.getDayEnd(endId.getDate());
标准=标准,其中(“_id”).lte(endId);
if(beginId!=null){
标准:gte(beginId);
}
标准。和(“更新时间”).lte(结束日期);
退货标准;
}

偶尔,数据删除会失败,导致下次备份时出现重复的KeyException。

使用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;
}