我有一个像这样结构的mongodb集合:
{ "client" : "CLIENTIDHERE", "amount" : 90, "invoice": "SOMEIDHERE", "date" : ISODate("2014-07-09T11:13:49.273Z") }
并且需要以某种方式选择从客户端进行的所有付款。 在mysql中我会做这样的事情,但是使用mongodb我真的不知道。
SELECT SUM(amount) payments,client FROM invoices GROUP BY client;
我尝试了什么:
db.invoices.find({
$group: {
amount: {$sum: "$amount"}
}
}, {
$project:{
amount: "$amount",
client: "$client"
}
})
但它没有用。我做错了什么?
编辑:我收到以下错误: 错误:{“$ err”:“不支持的投影选项:金额”,“代码”:13097}
答案 0 :(得分:0)
您的$group步骤未定义GROUP BY
的内容。 MongoDB与SQL GROUP BY
的等价物是$ group语句的_id
字段,查询中缺少该字段。此外,如果您想使用aggregation,则需要使用.aggregate(
代替.find(
。
db.invoices.aggregate({
$group: {
_id: "$client",
amount: { $sum: "$amount"}
}
});
这会将客户端写入_id
字段。当您希望拥有名为client
的字段时,可以在$project
步骤中修复该字段,但在这种情况下不需要投影。