如何在mongoose和node.js中查询根据值来计算用户(类似于mysql distinct)?
我有一个在mongoose下面的集合:
_id username problem_no
而problem_no
可以是1,2或3。
我想在node.js中编写一个webservice,它会返回一个json,其中包含一些由problem_no区分的logging,例如:
"1" : "17", "2" : "13", "3" : "0"
到目前为止,我尝试过像:
var User = require('./model.js'); app.get('/countAll', function(req, res){ userModel // Uses Mongoose schema to run the search (empty conditions) var query = User.count({}); query.exec(function(err, users){ if(err) res.send(err); // If no errors are found, it responds with a JSON of all users res.json(users); }); });
但我不知道如何在这里介绍problem_no ..我会欣赏任何提示,非常感谢!
我想这是不可能的,就像你期望的那样,我认为你必须对每个problem_no
做3个查询:
User.find({problem_no:1}) .count() .exec(function (err, count) { res.send({user_problem_no_1: count}) })
尝试聚合框架 。 在stream水线中,利用$group
阶段的$cond
操作符来计算基于problem_no
值的计数,如下所示:
var pipeline = [ { "$group": { "_id": null, "problem_no1_count": { "$sum": { "$cond": [ { "$eq": [ "$problem_no", 1 ] }, 1, 0 ] } }, "problem_no2_count": { "$sum": { "$cond": [ { "$eq": [ "$problem_no", 2 ] }, 1, 0 ] } }, "problem_no3_count": { "$sum": { "$cond": [ { "$eq": [ "$problem_no", 3 ] }, 1, 0 ] } } } }, { "$project": { "_id": 0, "1": "$problem_no1_count", "2": "$problem_no2_count", "3": "$problem_no3_count" } } ]; User.aggregate(pipeline) .exec(function (err, result){ if (err) /* Handle error */ res.send(result); });