Ich brauche etwas etwas Komplexeres als die Beispiele in den MongoDB-Dokumenten und ich kann nicht in der Lage sein, meinen Kopf darum zu wickeln.MongoDB-Map verwenden/auf zwei Felder "gruppieren" reduzieren
sagen, dass ich eine Sammlung von Objekten des Formulars {date: "2010-10-10", type: "EVENT_TYPE_1", user_id: 123, ...}
haben
Jetzt möchte ich etwas ähnliches wie eine SQL GROUP BY-Abfrage erhalten, Datum und Art sowohl über die Gruppierung. Das heißt, ich möchte die Anzahl der Ereignisse jedes Typs an jedem Tag. Außerdem möchte ich es durch user_id eindeutig machen, dh. Wenn ein Benutzer mehrere Ereignisse am selben Tag hat, muss er nur einmal gezählt werden.
Ich versuche, dies mit map/reduce zu tun.
ich
db.logs.mapReduce(
function() {
emit(this.type, 1);
},
function(k, vals) {
var total = 0;
for (var i = 0; i < vals.length; i++)
total += vals[i];
return total;
}
)
die schön Gruppen nach Typ, aber jetzt, wie kann ich Gruppe von Datum zugleich? Scheint, dass der Schlüssel in emit() kein Array sein kann (ich dachte daran, emit([this.date, this.type], 1)
zu tun). Wie kann ich die Benutzerfreundlichkeit sicherstellen?
Ich beginne gerade mit MongoDB und habe immer noch Probleme, die grundlegenden Konzepte zu verstehen. Außerdem gibt es dort nicht viel Dokumentation. Jede Hilfe von erfahreneren Benutzern wird geschätzt. Vielen Dank!
couchdb kann Arrays als Schlüssel tun, nur sagen – dominic