質問: version3.0.0以前ではデータが重複している場合は ``` db.foo.ensureIndex({ bar: 1, baz: 1 }, { unique: true, dropDups: true }); ``` することで削除できていたのですが、3.0.0以降には削除できなくなってしまいました 3.0.0以降で重複するデータを削除する方法を探しています。 どなたかご教授いただけないでしょうか。
回答: の答えから: 確かめるステップ:{ "bar": 1, "baz": 1 }のキーの重複ドキュメントの_idをリストする ``` db.foo.aggregate([ { $group: { _id: { "bar": "$bar", "baz": "$baz"}, dups: { "$addToSet": "$_id" }, count: { "$sum": 1 } }}, { $match: { count: { "$gt": 1 } // 重複データ }} ]) ``` 消去を実行するステップ: ``` 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 }}); // 2番目からのドキュメントを削除する }) ```