最近自己有一份MongoDB的数据需要去重,但是发下直接运行以前的去重命令发现报错,通过查看报错信息发现报错原因为超出了MongoDB的内存的限制,通过查阅资料整理,终于解决了问题,下面奉上代码供大家参考。
查询数据中是否有重复的数据:
.aggregate([
{ $group: { _id : '$店铺id', count: { $sum : 1 } } },
{ $match: { count: { $gt : 1} } }
])
上诉代码段 $店铺id 对应的是需要查询的字段名。
百万级数据去重操作
db.getCollection('店铺链接_test').aggregate([
{
$group: { _id: {店铺id: '$店铺id'},count: {$sum: 1},dups: {$addToSet: '$_id'}}
},
{
$match: {count: {$gt: 1}}
}
],{allowDiskUse: true}).forEach( //(使用forEach循环根据_id删除数据)
function(doc){
doc.dups.shift();
db.getCollection('店铺链接_test').remove(
{
_id: {
$in: doc.dups
}
}
);
}
)
其中的重点是 {allowDiskUse: true} 这句话,通过查阅知晓语句的作用是 即允许使用磁盘缓存!