简体   繁体   English

为什么我不能使用mongoTemplate.remove删除数据

[英]Why can't I delete data using mongoTemplate.remove

I've used java spring-boot version 1.5.14.RELEASE and spring-data-mongodb version is 1.10.13-RELEASE . 我已经使用了java spring-boot版本1.5.14.RELEASEspring-data-mongodb版本是1.10.13-RELEASE I am trying to do data archiving. 我正在尝试进行数据存档。

I'll find the data in master MongoDB by beginId and endId , then synchronize data into other libraries, finally, I'll delete main library data by beginId and endId . 我将通过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;
}

Occasionally, data deletion fails, causing DuplicateKeyException on the next backup. 有时,数据删除失败,导致下次备份时出现DuplicateKeyException

Instead of using static Criteria function, use Criteria class object as: 代替使用静态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;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM