我使用了java spring-boot
版本1.5.14.RELEASE
并且spring-data-mongodb
版本是1.10 .13-发布
。我正在尝试进行数据归档。
我会通过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;
}
有时,数据删除失败,导致下次备份时出现 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/