Mongo DB删除重复数据文档实践
Posted 肖永威
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mongo DB删除重复数据文档实践相关的知识,希望对你有一定的参考价值。
首先,先构造重复数据记录。查询部分数据创建新的数据集“test”,然后重复查询部分数据集合并到新建“test”数据集中,示例代码如下。
db.getCollection('ForecastResult2_0').aggregate([
'$match':'carduser_id':'$in':[1313943,1726223,1726514],
'$project':'_id':0,'carduser_id':1,'lateststatus':1,'occurtime':1,'monthnum':1,'recalls':1,'yearmonth':1,'lasttradecount':1,'latestday':1,
'$out':'db':'ccm','coll':'test'],
'allowDiskUse':true)
//插入重复纪录
db.getCollection('ForecastResult2_0').aggregate([
'$match':'carduser_id':'$in':[1313943,1726223],
'$project':'_id':0,'carduser_id':1,'lateststatus':1,'occurtime':1,'monthnum':1,'recalls':1,'yearmonth':1,'lasttradecount':1,'latestday':1,
'$merge':'into':'db':'ccm','coll':'test'],
'allowDiskUse':true)
删除重复数据记录,使用聚合(group)出重复记录数组,再遍历此数组,删除重复数据。
db.getCollection('test').aggregate([
'$group':'_id':'carduser_id':'$carduser_id','yearmonth':'$yearmonth','count':'$sum':1,'ids':'$addToSet': '$_id', //把符合的记录的_id放到一个数组ids里
'$match':'count':'$gt':1],
'allowDiskUse': true
).forEach((doc)=> //得到重复的结果,循环记录进行删除
doc.ids.shift(); //保留一行记录,如果需要全部删除重复的,去掉该行
db.test.remove('_id':'$in':doc.ids) //根据重复_id删除指定的记录
)
小结
删除重复记录前,最后做好数据备份,并且如文中方法,先拿少量数据集测试一遍,避免出现误操作,造成不可估量的损失。
以上是关于Mongo DB删除重复数据文档实践的主要内容,如果未能解决你的问题,请参考以下文章