因为本人最近在一个项目中因为重复数据过多,需要在MongoDB中去重,但是在执行命令的时候,总是报错,经过查阅资料整理了一下代码供大家参考使用。
db.getCollection('数据库').aggregate([
{
$group: { _id: {去重字段: '$去重字段'},count: {$sum: 1},dups: {$addToSet: '$_id'}}
},
{
$match: {count: {$gt: 1}}
}
],{allowDiskUse: true}).forEach( //(使用forEach循环根据_id删除数据)
function(doc){
doc.dups.shift();
db.getCollection('数据库').remove(
{
_id: {
$in: doc.dups
}
}
);
}
)
在剔除大量重复数据时需要加入{allowDiskUse: true} 这句话在 $match: {count: {$gt: 1}} }],
{allowDiskUse: true}).forEach( //(使用forEach循环根据_id删除数据)
语句的解析:
1. 使用aggregate聚合查询重复数据
2. $group中是查询条件,根据 店铺id 字段来聚合相同的数据;
3. $count用来统计重复出现的次数, $match来过滤没有重复的数据;
4. $addToSet将聚合的数据id放入到dups数组中方便后面使用;
5. 查询结果使用forEach进行迭代id来删除数据
6. shift()作用是剔除队列中第一条id,避免删掉所有的数据;