从集合mongodb中删除重复文档

时间:2019-12-27 04:15:04

标签: mongodb mongodb-query aggregation-framework

我需要从收藏集中删除重复的文档。但是,它需要删除按名称重复但不属于同一类别的重复项。例如;

Collection =产品

Product {
 id: ...
 name:"Apple"
 category:"Fruit"
}

Product {
 id: ...
 name:"Apple"
 category:"Fruit"
}

Product {
 id: ...
 name:"Apple"
 category:"New Fruit"
}

因此最终结果将是两个文档。两者都有苹果的名字,但一个是“新水果”类别,一个是“水果”

干杯。

2 个答案:

答案 0 :(得分:0)

我们可以使用 foreach 关键字删除重复记录,找到重复记录并删除记录,请参见以下代码

db.demo1.find({}).forEach( function(myDoc) { 
    var condname=myDoc.name;
    var condcat=myDoc.cat;
    var countRecord=db.demo1.find( { name: condname, cat: condcat } ).count()
    if(countRecord > 1)
    {
      db.demo1.deleteMany( {_id:{$ne: myDoc._id}, name: condname, cat: condcat });
    }

} );

答案 1 :(得分:0)

以下聚合查询收集按_idname字段分组的category$project阶段仅保留重复的_id进行删除。最后,删除操作将删除由其_id查询的重复文档。

db.test.aggregate( [
  { 
      $group: { 
          _id: { n: "$name", c: "$category" },
          all_ids: { $addToSet: "$_id" }
      } 
  },
  { 
      $project: {
          dup_ids: { $slice: [ "$all_ids", 1, 9999999 ] },
          _id: 0
       }
  }
] ).forEach( doc => db.test.deleteMany( { _id: { $in: doc.dup_ids } } ) )