Tôi có một bộ sưu tập rất lớn trên MongoDB và tôi muốn xóa bản ghi trùng lặp khỏi bộ sưu tập đó. Ý nghĩ đầu tiên đến với tâm trí của tôi là thả chỉ mục và xây dựng lại chỉ mục bằng dropDups. Tuy nhiên, dữ liệu trùng lặp là quá nhiều để được xử lý bởi MongoDB.Làm thế nào để loại bỏ bản ghi trùng lặp trong MongoDB bởi MapReduce?
Vì vậy, tôi chuyển sang MapReduce để được trợ giúp. Đây là tiến bộ hiện tại của tôi.
m = function() {
emit(this.myid, 1);
}
r = function (k, vals) {
return Array.sum(vals);
}
res = db.userList.mapReduce(m,r, { out : "myoutput" });
Và tất cả bản ghi "myid" của bản ghi trùng lặp được lưu trữ trong bộ sưu tập "myoutput". Tuy nhiên, tôi không biết cách xóa bản ghi khỏi userList bằng cách tham chiếu myoutput.myid. Nó cho là một cái gì đó như thế này:
db.myoutput.find({value: {$gt: 1}}).forEach(
function(obj) {
db.userList.remove(xxxxxxxxx) // I don't know how to do so
})
Btw, sử dụng foreach dường như sẽ xóa tất cả các bản ghi với myid lành mạnh. Nhưng tôi chỉ muốn xóa các bản ghi trùng lặp. Ví dụ:
{ "_id" : ObjectId("4edc6773e206a55d1c0000d8"), "myid" : 0 }
{ "_id" : ObjectId("4edc6780e206a55e6100011a"), "myid" : 0 }
{ "_id" : ObjectId("4edc6784e206a55ed30000c1"), "myid" : 0 }
Kết quả cuối cùng sẽ chỉ giữ lại một bản ghi. Ai đó có thể cho tôi một số trợ giúp về điều này?
Cảm ơn bạn. :)
Cảm ơn bạn. Nó hoạt động. Tuy nhiên, sẽ có bản ghi 3M trong bộ sưu tập của tôi. Tốc độ thực thi cực kỳ chậm. Có thể tăng tốc nó không? –