Ich brauche eine Summe der Ergebnisse einer Abfrage Gruppe von einem Feld. Ich erkläre dies mit einem Beispiel.Return-Summe mit Modul GROUP BY
Dies ist das Ergebnis von find()
{ "_id" : ObjectId("5749a5fd7aed9ced75b94218"), "groupValue" : "5", "weight" : 123 }
{ "_id" : ObjectId("5749a5fd7aed9ced75b94219"), "groupValue" : "5", "weight" : 345 }
{ "_id" : ObjectId("5749a5fd7aed9ced75b9421a"), "groupValue" : "2", "weight" : 1 }
{ "_id" : ObjectId("5749a5fd7aed9ced75b9421b"), "groupValue" : "2", "weight" : 2 }
{ "_id" : ObjectId("5749a5fd7aed9ced75b9421c"), "groupValue" : "5", "weight" : 567 }
Jetzt mag ich ein Ergebnis, bei denen die Summe für alle das Gewicht eines groupValue berechnet wird.
Für dieses Beispiel möchte ich
(123 + 345 + 567)mod(5)
and
(1+2)mod(2)
SOLUTION finded: ich es mit meiner eigenen Lösung gelöst. ich eine neue JavaScript-Funktion registriert:
db.system.js.save(
{
_id : "getModulus" ,
value : function (x, modulus){ return x % modulus; }
}
);
es jetzt laden: db.loadServerScripts();
Jetzt erstelle ich zwei Funktion: Karte, reduzieren.
var map = function() {
var key = {groupValue: this.groupValue};
emit(key, {weight: this.weight, groupValue: this.groupValue});
};
var reduce = function (key, values) {
var sum = 0;
var groupValue = 0;
values.forEach(function (value) {
sum += value['weight'];
groupValue = value['groupValue'];
});
var number = getModulus(sum, groupValue);
return {weight: number};
};
und jetzt meine verkleinern nennen:
db.hits.mapReduce(map, reduce, {out: {inline:1}})
Es ist unklar, was du willst. Willst du nur die Summe? Was ist '5' in' mod (5) ' – styvane
Gegeben zwei Zahlen, a (die Dividende) und n (der Divisor), ist ein Modulo n (abgekürzt als eine mod n) der Rest aus der Division von a durch n. Zum Beispiel würde der Ausdruck "7 mod 5" zu 2 ausgewertet werden, weil 7 geteilt durch 5 einen Rest von 2 ergibt, während "10 mod 5" zu 0 ausgewertet würde, weil die Division von 10 durch 5 einen Rest von 0 ergibt. – aRaKaNoiD
beantwortete meine Frage nicht. Ist '5' und' 2' der Feldwert "groupValue"? – styvane