gpt4 book ai didi

java - 在 Spring JPA for mongodb 中运行自定义删除查询时如何利用 Pageable?

转载 作者:行者123 更新时间:2023-11-30 05:22:36 25 4
gpt4 key购买 nike

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

@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();
}

关于java - 在 Spring JPA for mongodb 中运行自定义删除查询时如何利用 Pageable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59309761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com