【发布时间】:2015-07-14 00:04:24
【问题描述】:
我们有一个聚合查询投射几个子文档。我们想对这些投影值应用一些算术运算,例如 Sum 和 Product。
聚合查询 --
Item.aggregate([
{ $unwind: '$dummy'},
{ $match: {'dummy.storage': {$gt: 0}} },
{ $group: {_id: '$_id',
dummy: {$push: '$dummy'},
original_y: { $first: "$original_y" },
new_y: { $first: "$new_y" },
}},
{$project:{
original_y: 1, new_y: 1,
tallyAmount: {$sum: ["$new_y","$original_y"] }
}
},
]
)
.exec(function(err, results){
if(err)
{
console.log("Error : " + err);
return res.json ({error: "Error"});
}
else if(!(results) || results == null || results.length == 0)
{
console.log("No Results Found");
return res.json ({error: "No Results Today"});
}else{
res.send(results);
}
});
这给出了一个错误说明
invalid operator '$sum'
我们应该怎么做才能得到$project中original_y和new_y的总和?
编辑
文件:
{
id:1,
original_y: 200,
new_y: 140,
dummy: [
{id:1, storage:2, cost: 10},
{id:2, storage:0, cost: 20},
{id:3, storage:5, cost: 30},
]
}
预期输出:
{
id:1,
original_y: 200,
new_y: 140,
dummy: [
{id:1, storage:2, cost: 10, tallyAmount: 34},
{id:3, storage:5, cost: 30, tallyAmount: 11.33},
]
}
在哪里,
tallyAmount = (original_y + new_y) / cost
错误:无法为 dummy 的子字段添加表达式,因为已经存在适用于整个字段的表达式
【问题讨论】:
-
@chridam 已更新文档和预期输出
-
感谢您的更新,我已经更新了下面的答案以合并更改。
标签: node.js mongodb mongoose aggregation-framework