有如下数据:
{'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 }});
});

本文介绍了一种在MongoDB中去除特定字段重复记录的方法,通过使用聚合管道和$group阶段来标识重复项,并利用$match阶段筛选出重复次数大于1的记录,最后通过remove操作从另一个集合中移除这些重复项。
2915

被折叠的 条评论
为什么被折叠?



