锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 软件开发
  3. 数据库
  4. MongoDB分页查询

MongoDB分页查询

0
  • 数据库
  • 发布于 2024-09-25
  • 11 次阅读
黄健
黄健
// 分页查询方法
public static Query getQuery(long startId) {
        Query query = new Query()
                .addCriteria(Criteria.where("_id").gt(startId))
                .with(Sort.by(new Sort.Order(Sort.Direction.ASC, "_id")))
                .limit(5000);
        return query;
    }
```java
private static final String REGEX = "^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$";
private static final AtomicInteger saveCount = new AtomicInteger();
private static final AtomicInteger phoneIsNullCount = new AtomicInteger();
private static final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");

@Autowired
MongoTemplate mongoTemplate;

@Autowired
SendMessageImMapper sendMessageImMapper;

public String selectUserByProperty() {
        ExecutorService serviceExecutor = Executors.newFixedThreadPool(50);
        List<Future<Boolean>> futureList = new ArrayList<>();
        long lastDataResultId = 0;
        Integer dealDataCount = 0;
        int i = (1676955 / 5000) + 1;
        for (int k = 0; k < i; k++) {
            List<CompanyInfoFromMongoDocument> mongoDocuments = mongoTemplate.find(
                    getQuery(lastDataResultId), CompanyInfoFromMongoDocument.class);
            log.info("====>数据信息分批处理-mongoDocuments数据大小:{}", mongoDocuments.size());
            dealDataCount = dealDataCount + mongoDocuments.size();
            log.info("====>数据处理大小:{}", mongoDocuments.size());
            if (CollectionUtils.isNotEmpty(mongoDocuments)) {
                for (CompanyInfoFromMongoDocument po: mongoDocuments) {
                    Future<Boolean> future = serviceExecutor.submit(() -> {
                        MongoDBPO mongodpo = new MongoDBPO();
                        String phoneNumber = po.getPhoneNumber();// 电话
                        if (StringUtils.isNotBlank(phoneNumber)) {
                            Pattern PATTERN_REGEX = Pattern.compile(REGEX);
                            Matcher matcher = PATTERN_REGEX.matcher(phoneNumber);
                            if (matcher.find()) {
                               sendMessageImMapper.saveMongoDBData(tianYanChaPO);
                                if (saveCount.get() % 2000 == 0) {
                                    log.info("====>已保存用户数量:{}", saveCount.get());
                                }
                            }
                        } else {
                            phoneIsNullCount.incrementAndGet();
                        }
                    }, true);
                    lastDataResultId = mongoDocuments.get(mongoDocuments.size() - 1).getId();
                    futureList.add(future);
                }
            }
            futureList.forEach(f -> {
                try {
                    f.get(10, TimeUnit.SECONDS);
                } catch (TimeoutException e) {
                    f.cancel(true);
                } catch (InterruptedException | ExecutionException e) {
                    log.info("处理异常:{}", e);
                }
            });
            log.info("时间:{}, 起始查询id:{}, phone是空的数量:{}", dateFormat.format(new Date()), lastDataResultId, phoneIsNullCount.get());
        }
        return "数据处理结束";
    }
```
 

原文链接: https://onlyou.blog.csdn.net//article/details/102505314

标签: #MongoDB 13 #数据库 67
相关文章

深入理解MySQL InnoDB中的B+索引机制 2024-09-30 14:41

目录 一、InnoDB中的B+ 树索引介绍 二、聚簇索引 (一)使用记录主键值的大小进行排序

mysql中B+树的数据存储 2024-09-29 16:36

B+树索引基础分析 B+树 的定义 B+树是一种自平衡的树形数据结构,常用于数据库和操作系统的索引结构。它具有以下特点: 所有数据都存储在叶子节点,非叶子节点仅存储键值和子节点的指针。 叶子节点之间通过指针相互连接,形成一个有序链表,便于范围查询。 每个节点可以拥有多个键值,键值之间是有序的。 B+

MySQl索引事务(B树) 2024-09-29 16:36

目标: 索引 事务 1.索引 1.1概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。 1.2作用 数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。 索引所起的作用类似书籍

MySQL数据库的备份与恢复 2024-09-26 17:57

MySQL数据库的备份与恢复 在现代信息时代,数据已成为企业和个人的重要资产,数据的安全性和可恢复性直接影响到业务的连续性和稳定性。MySQL作为广泛使用的关系型数据库管理系统,其数据的备份与恢复显得尤为重要。本文将详细探讨MySQL数据库的备份与恢复策略,包括备份的重要性、备份类型、常用备份方法及

MySQL中创建数据库和表 2024-09-26 17:57

在MySQL中创建数据库和表是数据库管理的基础步骤,它们构成了数据存储和操作的基础结构。下面,我将详细介绍如何在MySQL中创建数据库和表,包括创建数据库的基本语法、设计表的考虑因素、表的创建过程、数据类型和约束的使用等,力求内容详尽且不少于2000字。 一、创建数据库 在MySQL中,数据库是一个

MySQL数据库主从搭建(详细图文) 2024-09-28 15:11

MySQL数据库主从搭建(详细图文) 前言 主从原理: MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以"事件"的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.