MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Entfernen doppelter Datensätze mit MapReduce

Ich habe mongoDB nicht verwendet, aber ich habe mapreduce verwendet. Ich denke, Sie sind in Bezug auf die MapReduce-Funktionen auf dem richtigen Weg. Um 0 und leere Zeichenfolgen auszuschließen, können Sie in der Kartenfunktion selbst ein Häkchen hinzufügen. So etwas wie

m = function () { 
  if(this.MlsId!=0 && this.MlsId!="") {    
    emit(this.MlsId, 1); 
  }
} 

Und Reduce sollte Schlüssel-Wert-Paare zurückgeben. Also sollte es sein:

r = function(k, vals) {
  emit(k,Arrays.sum(vals);
}

Danach sollten Sie eine Reihe von Schlüssel-Wert-Paaren in der Ausgabe haben, sodass der Schlüssel MlsId und der Wert die Anzahl der Male ist, die diese bestimmte ID vorkommt. Ich bin mir über den db.drop() Teil nicht sicher. Wie Sie darauf hingewiesen haben, werden höchstwahrscheinlich alle MlsIds gelöscht, anstatt nur die doppelten zu entfernen. Um dies zu umgehen, können Sie vielleicht zuerst drop() aufrufen und dann die MlsId einmal neu erstellen. Funktioniert das für Sie?