运行 Spring JPA 中针对 mongodb 的自定义删除查询时如何使用 Pageable?

How to utilize Pageable when running a custom delete query in Spring JPA for mongodb?

我正在创建一个允许管理员从数据库中清除数据的工具。我们的一个集合有数百万条记录,删除会占用系统。最初,我只是 运行 查询 returns 一个页面并将其放入标准删除。理想情况下,我更愿意 运行 一次性查询和删除。

@Query(value = "{ 'timestamp' : {$gte : ?0, $lte: ?1 }}")
public Page deleteByTimestampBetween(Date from, Date to, Pageable pageable);

这可能吗,使用上面的代码,系统的行为与程序不继续删除功能和数据不从 mongo 中删除的情况相同。或者有更好的方法吗?

我认为使用 Pageable/Query 注释是不可能的。您可以使用Bulk Write来批量处理删除。

类似

int count = 0;
int batch = 100; //Send 100 requests at a time
BulkOperations bulkOps = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, YourPojo.class);
List<DateRange> dateRanges = generateDateRanges(from, to, step); //Add a function to generate date ranges with the defined step.

for (DateRange dateRange: dateRanges){
    Query query = new Query();
    Criteria criteria = new Criteria().andOperator(Criteria.where("timestamp").gte(dateRange.from), Criteria.where("timestamp").lte(dateRange.to));
    query.addCriteria(criteria);
    bulkOps.remove(query);
    count++;
    if (count == batch) {
        bulkOps.execute();
        count = 0;
    }
}

if (count > 0) {
    bulkOps.execute();
}