Eu não usei o mongoDB, mas usei o mapreduce. Acho que você está no caminho certo em termos das funções mapreduce. Para excluir ele 0 e strings vazias, você pode adicionar uma verificação na própria função map .. algo como
m = function () {
if(this.MlsId!=0 && this.MlsId!="") {
emit(this.MlsId, 1);
}
}
E reduzir deve retornar pares de valores-chave. Assim deve ser:
r = function(k, vals) {
emit(k,Arrays.sum(vals);
}
Depois disso, você deve ter um conjunto de pares chave-valor na saída, de modo que a chave seja MlsId e o valor seja o número de vezes que esse ID específico ocorre. Não tenho certeza sobre a parte db.drop(). Como você apontou, ele provavelmente excluirá todos os MlsIds em vez de remover apenas os duplicados. Para contornar isso, talvez você possa chamar drop() primeiro e depois recriar o MlsId uma vez. Será que isso funciona para você?