【问题标题】:Removing Duplicate Documents from collection mongodb从集合 mongodb 中删除重复的文档
【发布时间】:2019-12-27 14:18:36
【问题描述】:

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

收藏=产品

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

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

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

所以最终结果将是两个文档。两者都有名称 Apple,但一个属于“新水果”类别,一个属于“水果”

干杯。

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    我们可以使用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 });
        }
    
    } );
    

    【讨论】:

      【解决方案2】:

      以下聚合查询收集由namecategory 字段分组的_ids。 $project 阶段仅保留重复的 _ids 以​​供删除。最后,delete 操作删除了由_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 } } ) )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-21
        • 2018-11-21
        • 2013-08-23
        • 1970-01-01
        • 2015-05-15
        • 1970-01-01
        相关资源
        最近更新 更多