有如下数据:
{'time':'2017-04-01 16:25:21','name':'aaaa'}
{'time':'2017-03-01 16:25:21','name':'bbbb'}
{'time':'2017-02-01 16:25:21','name':'aaaa'}
{'time':'2017-04-01 16:25:21','name':'aaaa'}
{'time':'2016-11-01 16:25:21','name':'bbbb'}
{'time':'2016-12-01 16:25:21','name':'aaaa'}
{'time':'2016-11-01 16:25:21','name':'bbbb'}
需要删除掉同一个name下time有重复的数据,只保留一条。
首先向集合中插入测试数据
db.col.insertMany([
{"_id":1,'time':'2017-04-01 16:25:21','name':'aaaa'},
{"_id":2,'time':'2017-03-01 16:25:21','name':'bbbb'},
{"_id":3,'time':'2017-02-01 16:25:21','name':'aaaa'},
{"_id":4,'time':'2017-04-01 16:25:21','name':'aaaa'},
{"_id":5,'time':'2016-11-01 16:25:21','name':'bbbb'},
{"_id":6,'time':'2016-12-01 16:25:21','name':'aaaa'},
{"_id":7,'time':'2016-11-01 16:25:21','name':'bbbb'},
]);
然后使用下面命令可以实现删除重复数据
db.col.aggregate([
{ $group: {
_id: { time: "$time", name: "$name"},
dups: { "$addToSet": "$_id" },
count: { "$sum": 1 }
}},
{ $match: {
count: { "$gt": 1 }
}}
],
{allowDiskUse: true} # 如果数据超过一定大小的时候,要加这个,如果不加,会报错
).forEach(function(doc) {
doc.dups.shift();
db.yyy.remove({_id : {$in: doc.dups }});
});