Ich habe ein Problem mit der Erstellung eines Mapreduce-Algorithmus, der mir die Statistiken liefert, die ich brauche. Ich habe ein Benutzerobjekt, das einen Post erstellen kann und ein Post kann viele Likes von anderen Benutzern haben.MapReduce auf untergeordnete Objekte, die nicht eingebettet sind
Benutzer
--post
---- Likes
Die Post in dem Benutzer nicht eingebettet ist, weil wir Beiträge separat und nicht nur in einem Benutzerkontext zuzugreifen. Die Statistik, die ich brauche, ist die Anzahl der Likes, die ein Autor bekommen hat, und ich muss das durch die Beiträge eines Benutzers herausfinden. Das Problem ist, dass die Posts nicht eingebettet sind, kann ich nicht auf sie in meiner Map-Funktion zugreifen. Hier ist die Karte und Funktionen reduzieren ich derzeit
def reputation_map
<<-MAP
function() {
var posts = db.posts.find({user_id:this._id});
emit(this._id, {posts:posts});
}
MAP
end
def reputation_reduce
<<-REDUCE
function(key, values) {
var count = 0;
while(values.hasNext()){
values.next();
count+=1;
}
return {posts:count};
}
REDUCE
end
Dies sollte nur die Beiträge zurückkehren für jeden Benutzer so habe ich nicht einmal zu den Gleichen bekommen Ebene noch nicht, aber statt einer Zählung, dies gibt nur eine dbquery für Beiträge . Was ist der richtige Weg, dies zu tun?
Graf likes per user_id (die in Post ist). Dann, falls erforderlich, ordnen Sie diese Benutzer-ID den Benutzern zu (in einer separaten Abfrage). –
Ich bin mir nicht sicher, wie man sie in mapreduce abfragt, weil sie nicht eingebettet sind. – Slick86
map-reduce über Beiträge, nicht Benutzer. Dann erhalten Sie in einer separaten Abfrage (nicht map-reduce) erweiterte Benutzerinformationen (falls erforderlich). –