我在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}
或类似的东西?
答案 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,也是很好的例子。