db.createCollection("marks");
db.marks.insert({man: "Maxim", mark: 4});
db.marks.insert({man: "Maxim", mark: 4});
db.marks.insert({man: "Maxim", mark: 5});
db.marks.insert({man: "Maxim", mark: 5});
db.marks.insert({man: "George", mark: 2});
db.marks.insert({man: "George", mark: 2});
db.marks.insert({man: "George", mark: 3});
db.marks.insert({man: "George", mark: 3});
db.marks.insert({man: "George", mark: 3});
db.marks.insert({man: "George", mark: 2});
db.marks.insert({man: "Ann", mark: 5});
db.marks.insert({man: "Ann", mark: 4});
db.marks.group({
key: {man: true},
initial: {myCount: 0},
reduce: function(doc, aggregator) {
aggregator.myCount += 1;
},
finalize: function(doc) {
doc.count_of_marks = doc.myCount;
}
});
db.marks.group({
key: {man: true},
initial: {myCount: 0, myMarksSum: 0},
reduce: function(doc, aggregator) {
aggregator.myCount += 1;
aggregator.myMarksSum += doc.mark;
},
finalize: function(doc) {
doc.avg_result = doc.myMarksSum / doc.myCount;
}
});
db.marks.group({
key: {man: true},
initial: {m2: 0, m3: 0, m4: 0, m5: 0, mAll: 0},
reduce: function(doc, aggregator) {
aggregator.mAll++;
if(doc.mark === 2) aggregator.m2++;
if(doc.mark === 3) aggregator.m3++;
if(doc.mark === 4) aggregator.m4++;
if(doc.mark === 5) aggregator.m5++;
},
finalize: function(doc) {
doc.twoPercent = (doc.m2 / doc.mAll) * 100 + "%";
doc.threePercent = (doc.m3 / doc.mAll) * 100 + "%";
doc.fourPercent = (doc.m4 / doc.mAll) * 100 + "%";
doc.fivePercent = (doc.m5 / doc.mAll) * 100 + "%";
}
});