我有很多包含重复地址的记录。基本上,我想删除那些重复地址数超过50但少于300的记录。
这就是我获取那些我想要删除的记录的方法:
db.directories.aggregate( [
{ $group: { _id: { address: "$address" }, total: { $sum: 1 } } },
{ $match: { total: { $gt: 50, $lt: 300 } } },
{ $sort: { total: -1 } }
], { allowDiskUse: true });
答案 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);
});