我如何总结我的mongodb集合中的值?

时间:2016-10-10 19:42:22

标签: node.js mongodb mongoose

我在mongoose中有一个类似于此的模型:

var TestSchema = new Schema({
    test_username: {type: String, required: true},
    test_content: {type: String},
    reactions: [{
        test_username: {type: String, required: true},
        value: {type: Number, required: true},
        sent_at: {type: Date, required: true, default: Date.now}
    }],
    created_at: {type: Date, default: Date.now},
    updated_at: {type: Date, default: Date.now}
 })

它存储我的Test对象,其中包含许多反应。每个反应都包含1-1 value以及不同的用户名。 现在,我尝试创建一个端点,将Test id作为输入,并从其包含的所有反应中返回总计,总计的数量。

我开始把它写成:

testRoutes.get('/:id/reactions/', functions.validateRequestsGET, function(req, res){
    var testId = req.params.id;

    var query = Test... //here I'm stuck

    query.exec(function(err, reactions){
        if(err) {
            res.send(err);
            return;
        }

        res.json(reactions);
    });
});

你可以给我一个如何创建一个查询的提示,该查询可以返回一个总和金额的json吗?像{reactions: 17}或类似的东西?

2 个答案:

答案 0 :(得分:1)

试试这个:

Test.aggregate(
    { $match: {
        _id: testId // you might want to convert this from string to ObjectId()
    }},    
    { $project: {
        sumReactions: { $sum: "$reactions.value" }
    }}
)

答案 1 :(得分:0)

在文档中查看组累加器$group,也是很好的例子。