Mongo Java Driver使用getCollection做分页查询遇到的一些坑
背景
最近在做Mongo上的表数据的迁移,原本应该是DBA要干的活,但是想着DBA排期比较长,加上我们开发的权限又非常有限,而且数据量又没有多少,就想着自己开发个小小的程序从旧实例上查,写到新实例上去算了。于是就遇到了今天要分享的这个坑。
有问题代码
这个方法目的是查询表的所有数据,但是返回的结果实际会有问题,返回来的并非全量数据。原因是分好页之后,在去查询每页的数据的时候都重新再查询了下集合,然后再取分页数据,这个过程中有其他的线程也去修改这个集合的数据,集合数据变化了就会导致查询到的分页数据不正确。
/*** 这个方法目的是查询表的所有数据,但是返回的结果实际会有问题,会出现数据不完整* 原因是分好页之后,查询每页的数据的时候都重新查询了集合,这个过程中有其他的线程也去修改这个集合的数据,* 集合数据变化了就会导致查询到的分页数据不正确。* @param dbName* @param tableName* @return*/public List<Document> queryCollections_Error(String dbName, String tableName) {List<Document> result = new ArrayList<>();long count = this.count(dbName, tableName);int pageSize = 1000;for (int idx = 0; idx < count; idx += pageSize) {result.addAll(this.queryCollectionsByPage(dbName, tableName, idx, pageSize));}return result;}
改正后的代码
改正后的代码,是只能保证了在程序开始运行的这一刻mongo表的快照的数据同步到新表是准确的,但是同步程序运行过程中如果表数据发生了变更,这部分数据是没有变更到新实例上面去的,这个大家需要注意。我们的业务是对内的业务,而且数据量不大,因此在同步的时候禁写掉这个服务中断时间可以接受。如果是不可接受服务中断,那么应该要考虑下全量+增量的方案。
public List<Document> queryCollections(String dbName, String tableName) {List<Document> result = new ArrayList<>();MongoCollection<Document> mongoCollection = this.mongoClient.getDatabase(dbName).getCollection(tableName);long count = mongoCollection.countDocuments();int pageSize = 1000;for (int idx = 0; idx < count; idx += pageSize) {FindIterable<Document> iterable = mongoCollection.find().skip(idx).limit(pageSize);iterable.forEach(new Block<Document>() {@Overridepublic void apply(Document document) {result.add(JSON.parseObject(JSON.toJSONString(document), Document.class));}});}return result;}
完整代码
下载
相关文章:
Mongo Java Driver使用getCollection做分页查询遇到的一些坑
背景 最近在做Mongo上的表数据的迁移,原本应该是DBA要干的活,但是想着DBA排期比较长,加上我们开发的权限又非常有限,而且数据量又没有多少,就想着自己开发个小小的程序从旧实例上查,写到新实例上去算了。于…...
RK3568笔记六十四:SG90驱动测试
若该文为原创文章,转载请注明原文出处。 前面有测试过PWM驱动,现在使用两种方式来产生PWM驱动SG90,实现舵机旋转任意角度 方法一:使用硬件PWM 方法二:使用高精度定时器,GPIO模拟PWM. 一、PWM子系统框架 二、SG90控制方法 舵机的控制需要MCU产生一个周期为20ms的脉冲信号…...
31 基于51单片机的水位监测系统仿真
目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,DHT11温湿度检测,水位检测,通过LCD1602显示,超过阈值报警,继电器驱动电机转动。通过矩阵按键切换选择设置各项参数阈值。 …...
Docker 实践与应用举例
一、容器化Web应用: 创建一个Docker容器来运行一个简单的Web应用,例如一个基于Node.js的Express应用。首先,编写Dockerfile来定义容器的构建过程,然后使用Docker命令来构建和运行容器。 使用Docker Compose来定义和管理多个容器组…...
公开数据集网站分享
参考链接:常用的医学组织切片细胞图像数据集_细胞分割数据集-CSDN博客文章浏览阅读1.3w次,点赞32次,收藏133次。乳腺癌细胞图像数据集、血细胞图像数据集、HE染色切片、疟疾细胞图像图像识别、分类、分割_细胞分割数据集https://blog.csdn.ne…...
实验OSPF路由协议(课内实验)
实验1:OSPF路由协议 实验目的及要求: 通过实验,能够理解链路状态型路由协议OSPF协议的工作原理,掌握如何实现单区域 OSPFv2配置指令,能够熟练的应用各种OSPF协议相关的配置指令完善网络设计。掌握验证OSPFv2网络连接…...
GPU Puzzles讲解(一)
GPU-Puzzles项目可以让你学习到GPU编程和cuda核心并行编程的概念,通过一个个小问题让你理解cuda的编程和调用,创建共享显存空间,实现卷积和矩阵乘法等,通过每个小问题之后还会奖励一个狗狗小视频😁 下面是项目的仓库&…...
滚雪球学Oracle[1.3讲]:内存与进程架构
全文目录: 前言一、SGA的深度解析1.1 SGA的作用与构成SGA的大小与调整 1.2 数据库缓冲区缓存(DB Cache)DB Cache的工作原理案例演示:调整DB Cache的大小 1.3 共享池(Shared Pool)的构成与调优共享池的组成部…...
Nginx的正向与反向代理
一、Nginx简介 1. 什么是Nginx Nginx(发音为“engine-x”)是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器。Nginx是由俄罗斯的Igor Sysoev(伊戈尔赛索耶夫)为解决C10k问题(即…...
esp8266 at指令链接wifi时一直connect disconnest
那是你的连接wifi的名字密码有误或者热点有问题,看看热点是不是把设备拉入黑名单或者设置为5G或者连了校园网或者设置了最多链接设备...
基于SpringBoot博物馆游客预约系统【附源码】
基于SpringBoot博物馆游客预约系统 效果如下: 主页面 注册界面 展品信息界面 论坛交流界面 后台登陆界面 后台主界面 参观预约界面 留言板界面 研究背景 随着现代社会的快速发展和人们生活水平的提高,文化生活需求也在日益增加。博物馆作为传承文化、…...
【JVM】内存区域划分,类加载的过程,.class文件的格式
一个java写的程序,跑起来就得到了一个java进程,而java进程=JVM上面运行的字节码指令 JVM是「java虚拟机」,负责解释执行java的指令 【JVM内存区域划分】 1.程序计数器(比较小的空间) 作用:保存了下一条…...
esp32-camera入门(基于ESP-IDF)
主要参考资料: ESP32-S2 Kaluga camera lcd 示例入门: https://blog.csdn.net/Marchtwentytwo/article/details/121121028 摄像头应用方案常见问题汇总: https://docs.espressif.com/projects/esp-faq/zh_CN/latest/application-solution/camera-application.html …...
react中类式组件与函数式组件的区别
在React中,类式组件(Class Components)与函数式组件(Functional Components)是两种不同的组件定义方式,它们各有特点,适用于不同的场景。以下是它们之间的主要区别: 一、定义与语法…...
【D3.js in Action 3 精译_030】3.5 给 D3 条形图加注图表标签(下):Krisztina Szűcs 人物专访 + 3.6 本章小结
当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一部分 D3.js 基础知识 第一章 D3.js 简介(已完结) 1.1 何为 D3.js?1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践(上)1.3 数据可…...
【重学 MySQL】五十六、位类型
【重学 MySQL】五十六、位类型 定义赋值与使用注意事项应用场景 在MySQL数据库中,位类型(BIT类型)是一种用于存储位字段值的数据类型。 定义 BIT(n)表示n个位字段值,其中n是一个范围从1到64的整数。这意味着你可以存储从1位到64…...
Centos7 NTP客户端
目录 1. NTP客户端1.1 安装1.2 启动1.3 同步状态异常1.4 更改/etc/chrony.conf配置文件1.5 同步状态正常 1. NTP客户端 1.1 安装 如果chrony没有安装,可以使用以下命令安装 sudo yum install chrony1.2 启动 启动并设置开机自启 sudo systemctl start chronyd …...
手机号归属地查询-手机号归属地-手机号归属地-运营商归属地查询-手机号码归属地查询手机号归属地-运营商归属地
手机号归属地查询API接口是一种网络服务接口,允许开发者通过编程方式查询手机号码的注册地信息。关于快证签API接口提供的手机号归属地查询服务,以下是一些关键信息: 一、快证签API接口简介 快证签API接口可能是一个提供多种验证和查询服务…...
CoppeliaSim和Matlab建立远程连接教程
CoppeliaSim和Matlab建立远程连接教程 Matlab通过调用CoppeliaSim的远程API和库函数实现远程连接,为实现Matlab和CoppeliaSim的联合仿真做准备。 一、获取并查看版本信息 点击 Help 查看版本信息 使用的CoppeliaSim Edu版本为:4.4.0 位数:64bit 二、拷贝API函数和库文件…...
使用STS以及签名URL临时授权访问OSS资源
本文介绍JAVA如何使用STS以及签名URL临时授权访问OSS资源。 注意事项 由于STS临时账号以及签名URL均需设置有效时长,当您使用STS临时账号生成签名URL执行相关操作(例如上传、下载文件)时,以最小的有效时长为准。例如您的STS临时账…...
避坑指南:电商评论情感分析中常见的5大误区与解决方案
避坑指南:电商评论情感分析中常见的5大误区与解决方案 当你在深夜盯着屏幕上一堆杂乱无章的电商评论数据时,是否曾怀疑过自己的情感分析模型在"说谎"?那些看似完美的准确率数字背后,可能隐藏着连老手都会踩中的陷阱。本…...
OpenClaw办公自动化:GLM-4.7-Flash处理Excel与PDF文档
OpenClaw办公自动化:GLM-4.7-Flash处理Excel与PDF文档 1. 为什么需要AI处理办公文档? 上周五下午5点,我正对着电脑屏幕发愁——市场部发来的20份PDF调研报告需要提取关键数据,财务部的季度Excel报表等着合并分析,而我…...
通义千问3-Reranker-0.6B效果惊艳:数学证明步骤间逻辑连贯性重排序
通义千问3-Reranker-0.6B效果惊艳:数学证明步骤间逻辑连贯性重排序 1. 模型介绍与核心能力 通义千问3-Reranker-0.6B是Qwen3 Embedding模型系列的最新成员,专门针对文本重排序任务进行了深度优化。这个6亿参数的模型虽然体积小巧,但在数学证…...
牛顿-拉夫逊法在电力系统中的5个常见误区:从Matpower仿真结果反推算法原理
牛顿-拉夫逊法在电力系统中的5个常见误区:从Matpower仿真结果反推算法原理 当你在Matpower中运行潮流计算时,是否遇到过迭代不收敛的报错?那些看似简单的"Maximum number of iterations reached"警告背后,往往隐藏着对牛…...
UE5场景过曝/白屏排查指南:从后期处理体积到项目设置的实战修复
1. 当UE5场景变成"雪盲症"时该怎么办? 第一次打开UE5项目看到白茫茫一片的时候,我差点以为显卡烧了。这种场景过曝现象就像在雪山没戴墨镜,所有细节都被强光吞噬。新手遇到这种情况别慌,我整理了从"急救措施"…...
解锁汽车ECU诊断新可能:ECUBus-Pro开源工具的全场景应用指南
解锁汽车ECU诊断新可能:ECUBus-Pro开源工具的全场景应用指南 【免费下载链接】ECUBus ECU bus tool, UDS over CAN, CAN-FD, Ethernet and so on. 项目地址: https://gitcode.com/gh_mirrors/ec/ECUBus ECUBus-Pro是一款功能强大的开源汽车ECU开发工具&#…...
如何用掩码生成蒸馏(MGD)提升小模型性能?实战ResNet-18到ImageNet分类
掩码生成蒸馏实战:如何让ResNet-18在ImageNet上提升1.8%准确率 在模型轻量化的浪潮中,知识蒸馏技术正经历着从简单模仿到特征重构的范式转变。当我们用ResNet-50这样的"大模型"指导ResNet-18等"小模型"训练时,传统方法往…...
万物皆含意识:基于 OFIRM 框架下“信息闭合与自动确认”机制的本体论重构(声明:这是一个理论假说)
万物皆含意识:基于 OFIRM 框架下“信息闭合与自动确认”机制的本体论重构——对德布罗意物质波假说的对称性扩展与量子测量问题的去玄学化解作者:Haiting Allen Chen对应理论:本源场直觉共振模型 (OFIRM)___________________________________…...
OpenClaw自动化测试:百川2-13B驱动的前端元素定位与交互验证
OpenClaw自动化测试:百川2-13B驱动的前端元素定位与交互验证 1. 从手工测试到智能测试的进化之路 作为一名长期奋战在前端测试一线的开发者,我经历过从纯手工点击到Selenium脚本,再到Playwright框架的技术迭代。每次升级都带来效率提升&…...
STC89C52单片机+槽型光耦,手把手教你DIY一个低成本电机转速测量仪
STC89C52单片机槽型光耦DIY电机转速测量仪实战指南 从零搭建低成本测速系统的完整方案 电机转速测量在工业控制、机器人开发、智能小车等领域都是基础但关键的环节。市面上专业测速仪动辄上千元的价格让许多电子爱好者望而却步。其实,利用手头常见的STC89C52单片机…...
