1. 程式人生 > >mongodb分組統計,並且刪除重複資料

mongodb分組統計,並且刪除重複資料

// 找出按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
})

 

 

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刪除

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}});})