2019独角兽企业重金招聘Python工程师标准>>>
// 找出按pipe_id过滤重复的数据展示出来,第一个match是查询条件,$group是分组条件,后一个match是count>1的才展示出来,allowDiskUse:true允许到硬盘操作,否则内存不够
db.flow_data.aggregate([{
$match: {
'pipe_id': '17087582-f12b-11e8-893a-0242ac11001c'
}
},
{
$group: {
_id: {
pipe_id: '$pipe_id',
time: '$time'
},
count: {
$sum: 1
},
dups: {
$addToSet: '$_id'
}
}
},
{
$match: {
count: {
$gt: 1
}
}
}], {
allowDiskUse: true
})
// 找出按pipe_id+time过滤重复的数据删除掉, doc.dups.shift()后移一位,后面按id删除
// addToSet返回包含_id
db.flow_data.aggregate([{
$match: {
'pipe_id': '17087582-f12b-11e8-893a-0242ac11001c'
}
},
{
$group: {
_id: {
pipe_id: '$pipe_id',
time: '$time'
},
count: {
$sum: 1
},
dups: {
$addToSet: '$_id'
}
}
},
{
$match: {
count: {
$gt: 1
}
}
}], {
allowDiskUse: true
}).forEach(function(doc) {
doc.dups.shift();
db.flow_data.remove({
_id: {
$in: doc.dups
}
});
})