将Mysql查询转换为Mongodb find()

时间:2014-07-09 11:44:17

标签: mysql mongodb

我有一个像这样结构的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}

1 个答案:

答案 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步骤中修复该字段,但在这种情况下不需要投影。