有时候mongo的集合中数据量太大,查询或翻页时可能会超过最大数量报错,可以给mongo的集合进行备份并保留最近一段时间的数据即可
下面是通过Java代码进行mongo的集合备份单元测试
import cn.hutool.core.date.DateUtil;
import com.nuoyi.study.dao.mongo.po.BehaviorLogPo;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import java.util.Date;
import java.util.List;
/**
* @desc: mongo备份单元测试
* @Author: nuoyi
* @Date: 2023/11/7 2:39 下午
*/
@SpringBootTest(classes = App.class)
@Slf4j
public class MongoBackTest {
private final static String CollectionName = "NuoYi_Study_Behavior_Log";
@Autowired
private MongoTemplate mongoTemplate;
/**
* mongo指定集合备份
* */
@Test
public void test(){
long s = System.currentTimeMillis();
String targetCollectionName = CollectionName +"_"+ DateUtil.format(new Date(),"yyyy_MM");
// 创建备份集合A(如果不存在)
if (!mongoTemplate.collectionExists(targetCollectionName)) {
mongoTemplate.createCollection(targetCollectionName);
}
// 获取源集合B的数据并备份到集合A
List<BehaviorLogPo> documents = mongoTemplate.findAll(BehaviorLogPo.class, "NuoYi_Study_Behavior_Log");
mongoTemplate.insert(documents,targetCollectionName);
long e = System.currentTimeMillis();
System.out.println("数据备份完成!");
System.out.println("总共耗时:"+(e-s));
}
}
可以看到数据备份成功,在navicat中也能看到有125条数据
可配合定时器每月或每季度的凌晨备份数据并删除原集合中以往的数据,保留最近一段时间的数据即可,在生产中最好让DB或运维来操作备份数据库