设计一个基于mongo的文档对比工具

本文仅介绍一下实现思路,不详细进行代码说明

业务场景:数据迁移后,需要将新库里的文档内容和老库里的文档内容进行对比,查找数据不一致的文档

这里说一下我之前想到的一些思路:
1、使用第三方工具来实现,之前使用google的高亮文本对比工具类,但是使用过后发现这个所谓的高亮文本对比只能按照字符顺序地进行对比,比如说{name:dd,age:20}和{age:20,name:dd}这两个文档,其实内容都是一样的,在该业务场景下这两个文档即是一致的,但是使用这个第三方的对比工具类进行处理的话它会认为这两个文档不是一致的;因此这种方法,die;

2、使用map和set集合,每对比一个文档就将文档中的数据用map来进行存储,将两个文档的所有key丢进set然后遍历set拿到key再通过key去拿map中的value进行对比;想想就很麻烦,而且耗费的资源不可想象,如果文档中有key对应的value是map类型,那么还得进行处理,如果要优化的话也只能是先对key进行排序,判断两个文档中的key是否一致,如果一致的话再进行处理,这种方法耗费的资源太猛了,逻辑也十分的复杂,要根据文档来处理逻辑,die;

3、将文档转换成存储时的对象,通过对象来进行其属性值的比对,主要是使用反射,对对象中的不同数据类型的属性进行赋值的时候可以使用责任链模式。

详细说明一下第三种方法时的实现思路:
1、先自定义一个配置类用来存储多个mongo的连接信息(用来连接库)
2、根据配置信息获取每个库下的某个collection下的所有表(用来获取要对比的表)
3、获取所有表的索引(用来查找两个库中有相同索引的表,暂时只考虑对比两个库,将两个表空间中表的索引去重一下再在每个表空间中挨个遍历一下就可以初步得到内容不一致的表)
4、遍历所有表,使用反射根据表中的内容赋给该表对应的对象(用来做内容对比)
5、根据初始化好的对象进行对象属性值的对比,若所有属性相同则两个库中的表内容一致,若出现对象属性值不相同则两个库中的表内容不一致(对比内容)

贴一下项目结构
在这里插入图片描述

posted @   有锦  阅读(5)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示