MongoDB删除按计数分组的记录

时间:2015-07-08 20:29:20

标签: mongodb

我有很多包含重复地址的记录。基本上,我想删除那些重复地址数超过50但少于300的记录。

这就是我获取那些我想要删除的记录的方法:

db.directories.aggregate( [
   { $group: { _id: { address: "$address" }, total: { $sum: 1 } } },
   { $match: { total: { $gt: 50, $lt: 300 } } },
   { $sort: { total: -1 } }
], { allowDiskUse: true });

1 个答案:

答案 0 :(得分:2)

您可以使用光标方法 forEach() 来迭代从 aggregate() 方法返回的光标,并使用{{3}删除文档方法,如下例所示:

var pipeline = [
   { $group: { _id: { address: "$address" }, total: { $sum: 1 } } },
   { $match: { total: { $gt: 50, $lt: 300 } } },
   { $sort: { total: -1 } }
];
var options = { allowDiskUse: true };
db.directories.aggregate(pipeline, options).forEach(function (doc){
    var query = {"address": doc._id.address};
    db.directories.remove(query);
});