1535316910 发表于 2023-7-6 12:26:13

mongodb数据库文档去重操作


db.getCollection('monitorlogs_copy').aggregate([
    {
      $group: {
            _id: {
                monId: "$monId",
                monDbid: "$monDbid",
                pubTimestamp: "$pubTimestamp",
                getTimestamp: "$getTimestamp"
            },
            duplicates: { $push: "$_id" },
            count: { $sum: 1 }
      }
    },
    {
      $match: {
            count: { $gt: 1 }
      }
    }
]).forEach(function(doc) {
    doc.duplicates.shift();// 保留第一个文档,删除其他重复文档
    db.getCollection('monitorlogs_copy').remove({_id: {$in: doc.duplicates}});
});

1.$group阶段:使用文档中的monId、monDbid、pubTimestamp和getTimestamp字段作为分组的依据,将具有相同值的文档分为一组。在每个分组中,我们使用$push操作符将重复文档的_id字段添加到名为duplicates的数组中,并使用$sum操作符计算每个组中的文档数量。
2.$match阶段:根据每个组的文档数量count进行筛选,只保留有重复文档的组(count大于1)。
3.forEach方法:对于每个匹配的组,我们使用shift方法从duplicates数组中移除第一个元素(即保留第一个文档),并保留其他重复文档的_id。
4.remove操作:最后,我们使用$in操作符和$remove方法来删除包含在duplicates数组中的重复文档。

在聚合操作中启用磁盘使用选项 allowDiskUse:true,将中间结果写入磁盘而不是完全依赖内存

王一之 发表于 2023-7-6 14:45:12

哥哥可以用markdown的code功能

```js
你的代码
```

这样代码整洁些
页: [1]
查看完整版本: mongodb数据库文档去重操作