[英]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.RELEASE
和spring-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
. 我将通过
beginId
和endId
在主MongoDB中找到数据,然后将数据同步到其他库中,最后,我将通过beginId
和endId
删除主库数据。
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.