Tôi chưa sử dụng mongoDB nhưng tôi đã sử dụng mapreduce. Tôi nghĩ rằng bạn đang đi đúng hướng về các chức năng mapreduce. Để loại trừ số 0 và các chuỗi trống, bạn có thể thêm dấu kiểm trong chính hàm bản đồ .. đại loại như
m = function () {
if(this.MlsId!=0 && this.MlsId!="") {
emit(this.MlsId, 1);
}
}
Và giảm sẽ trả về các cặp khóa-giá trị. Vì vậy, nó phải là:
r = function(k, vals) {
emit(k,Arrays.sum(vals);
}
Sau đó, bạn sẽ có một tập hợp các cặp khóa-giá trị ở đầu ra sao cho khóa là MlsId và giá trị là số thimes ID cụ thể này xuất hiện. Tôi không chắc về phần db.drop (). Như bạn đã chỉ ra, nó có thể sẽ xóa tất cả MlsIds thay vì chỉ xóa những cái trùng lặp. Để giải quyết vấn đề này, có thể bạn có thể gọi drop () trước rồi tạo lại MlsId một lần. Điều đó có hiệu quả với bạn không?