如何在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); });