项目中,发现通过mongodump导出,再通过mongoresto导入数据,发现数据顺序发生变化,从而导致前台显示数据错乱(由于后台直接采用数据库的默认排序,而未按业务排序)
mongodb版本:3.4.3
问题重现:
1.导出数据
mongodump -u admin -p 123456 --authenticationDatabase admin -d coms -c docTpl --archive=/root/coms_bak_20170518.gz --gzip
2.导入数据
mongorestore -u admin -p 123456 --drop -d coms -c docTpl --authenticationDatabase admin --gzip --archive=/home/coms_bak_20170518.gz
3.数据差异
源库数据:
目标库数据,此时数据顺序已经发生变化
问题解决:
此时查看mongodump的帮助发现numParallelCollections选项
--numParallelCollections number of collections to dump in parallel (4 by default) (default: 4) 支持多个集合并发导出/导入默认是4
此处并没有说明单个集合也是采用并发导出导入,是不是与这个参数有关,尝试将--numParallelCollections=1
1.导出数据
mongodump -u admin -p 123456 --authenticationDatabase admin --numParallelCollections=1 -d coms -c docTpl --archive=/root/coms_bak_20170524.gz --gzip
2.导入数据
mongorestore -u admin -p 123456 --drop -d coms -c docTpl --authenticationDatabase admin --numParallelCollections=1 --gzip --archive=/home/coms_bak_20170524.gz
3.比较数据的顺序是否一样
源库数据:
目标库数据:
通过比较发现此时两边的数据顺序是完全一致的,所有由此可以得出numParallelCollections参数单个集合也是采用并发方式导出的。