ursprüngliche Sammlung:mongodb mapreduce - ein Array oder ein Objekt im Reduce erstellen?
{
"_id" : ObjectId('xxxxxxxxxxxxxxxx'),
"userId" : ObjectId('yyyyyyyyyyyyyyyy'),
"urlId" : ObjectId('zzzzzzzzzzzzzzzzzz')
},
{
"_id" : ObjectId('uuuuuuuuuuuuuuuuuu'),
"userId" : ObjectId('aaaaaaaaaaaaaaaa'),
"urlId" : ObjectId('zzzzzzzzzzzzzzzzzz')
}
emittieren:
emit(this.urlId, {userId: this.userId, visitCount: this.visitCount});
reduzieren:
function(key, values) {
var visitCount = 0;
var userVC = new Array();
values.forEach(function(doc) {
NOT SURE WHAT TO PUT HERE TO ACHIEVE DESIRED OUTPUT COLLECTION
});
return {urlId: key, userVC: userVC};
};
MR Ausgang Sammlung gewünscht:
{
"_id" : ObjectId('zzzzzzzzzzzzzzzzzzzz'),
"value" : {
"urlId" : ObjectId('zzzzzzzzzzzzzzzzzzzz'),
"userVC" : {
ObjectId('yyyyyyyyyyyyyyyy') : <total visit count for this userId on this urlId>,
ObjectId('aaaaaaaaaaaaaaaa') : <total visit count for this userId on this urlId>
}
}
Eine zweite Map-Reduce-Operation könnte verwendet werden, um die Sammlung mit einem Schlüssel der Benutzer-AND-URL in eine mit einem Schlüssel für den Benutzer und einen Wert mit dem Array von Zählern umzuwandeln. –
Da Sie eins zuweisen, tun Sie dies für '(var i = 0; i
Danielo515
Nicht so @ Danielo515. Wir ordnen die Zählung 1 in der Karte zu, aber die Reduktion kann viele Male in beliebiger Reihenfolge geschehen, wobei emittierte Werte von der Karte mit vorher reduzierten Werten von einer Untermenge gemischt werden. Mit anderen Worten, innerhalb der Reduzierungsfunktion ist der Zählwert nicht immer eins. – Chris