在mongodb中查询

时间:2014-12-31 18:56:44

标签: sql mongodb

我的朋友告诉我mongo不值得学习,因为它很难做复杂的查询,如下所示:

SELECT person, SUM(score), AVG(score), MIN(score), MAX(score), COUNT(*) 
FROM demo 
WHERE score > 0 AND person IN('bob','jake') 
GROUP BY person;

他告诉我,如果我想用mongo做这个查询,我必须写这个

db.demo.group({
"key": {
"person": true
},
"initial": {
"sumscore": 0,
"sumforaverageaveragescore": 0,
"countforaverageaveragescore": 0,
"countstar": 0
},
"reduce": function(obj, prev) {
prev.sumscore = prev.sumscore + obj.score - 0;
prev.sumforaverageaveragescore += obj.score;
prev.countforaverageaveragescore++;
prev.minimumvaluescore = isNaN(prev.minimumvaluescore) ? obj.score : Math.min(prev.minimumvaluescore, obj.score);
prev.maximumvaluescore = isNaN(prev.maximumvaluescore) ? obj.score : Math.max(prev.maximumvaluescore, obj.score);
if (true != null) if (true instanceof Array) prev.countstar += true.length;
else prev.countstar++;
},
"finalize": function(prev) {
prev.averagescore = prev.sumforaverageaveragescore / prev.countforaverageaveragescore;
delete prev.sumforaverageaveragescore;
delete prev.countforaverageaveragescore;
},
"cond": {
"score": {
"$gt": 0
},
"person": {
"$in": ["bob", "jake"]
}
}
});

所以没有mongodb背景我不知道该怎么想,我一直在搜索周围,每个人都说mongo对很多东西更好,我怎么在mongo中进行这个查询呢? 是不是像我的朋友说的那样?或者有更简单的方法吗?

1 个答案:

答案 0 :(得分:4)

much easier way可以做到这一点。

db.demo.aggregate([
    { $match: { score: { $gt: 0 }, person: { $in: ["bob", "jake"] } } },
    { $group: { _id: "$person", scoreSum: { $sum: "$score" }, scoreAvg: { $avg: "$score" }, scoreMin: { $min: "$score" }, scoreMax: { $max: "$score" }, count: { $sum: 1 } } }
])