36791


version3.0.0以前ではデータが重複している場合は

[code]

    db.foo.ensureIndex({ bar: 1, baz: 1 }, { unique: true, dropDups: true });
    
[/code]

することで削除できていたのですが、3.0.0以降には削除できなくなってしまいました

3.0.0以降で重複するデータを削除する方法を探しています。

どなたかご教授いただけないでしょうか。


CC BY-SA 3.0
2017-07-29T10:32:43.510
36769
2017-07-30T13:24:03.960
2017-07-29T12:53:29.163
19110
24641
question
mongodb
mongodbの重複データ削除方法


<https://stackoverflow.com/a/33364816> の答えから：

確かめるステップ：{ "bar": 1, "baz": 1 }のキーの重複ドキュメントの_idをリストする

[code]

    db.foo.aggregate([
      { $group: { 
        _id: { "bar": "$bar", "baz": "$baz"}, 
        dups: { "$addToSet": "$_id" }, 
        count: { "$sum": 1 } 
      }}, 
      { $match: { 
        count: { "$gt": 1 }    // 重複データ
      }}
    ])
    
[/code]

消去を実行するステップ：

[code]

    db.foo.aggregate([
      { $group: { 
        _id: { "bar": "$bar", "baz": "$baz"}, 
        dups: { "$addToSet": "$_id" }, 
        count: { "$sum": 1 } 
      }}, 
      { $match: { 
        count: { "$gt": 1 }    // 重複データ
      }}
    ]).forEach(function(doc) {
        doc.dups.shift();      // 一番目を抜く
        db.foo.remove({_id : {$in: doc.dups }});  // ２番目からのドキュメントを削除する
    })
    
[/code]


CC BY-SA 3.0
2017-07-30T13:24:03.960
36791
2017-07-30T13:24:03.960
113
36769
answer