2012-11-16 30 views
1

我在SQL已经这个查询:计数MongoDB中

"SELECT code, name, count(*) FROM table WHERE customer = "XXX" GROUP BY code ORDER BY count(*) DESC; 

我与PHP的工作,我已经为这个mongodb的SQL查询翻译。我知道,我已经为MongoDB中计数做这样的事情:

$array_where_condition = array("customer" => "XXX"); 
$db->find($array_where_condition)->count(); 

,但我不明白怎么写类似上面的查询。

+1

标准数据是什么意思?标题和标签有误导性......它是SQL那里 – MimiEAM

+0

你是对的,我添加了几行,我希望它现在更清晰 – rikpg

+1

这可能会帮助你一点:http://rickosborne.org/download/SQL-to-MongoDB.pdf – MimiEAM

回答

3

如果你正在寻找使用map reduce这样的查询,那么你已经做错了。

MR在这种情况下不会成为SQL聚合框架的高性能替代品,并且不会实时内联运行到您自己的应用程序。

然而,您可以使用聚合框架,这可能会提供您正在寻找的性能。我有点生疏与聚合框架,这是快速写入然而,这可能是你所需要的东西接近:

db.col.aggregate(
    {$match: {customer: XXX}}, 
    {$group: 
     {_id: "$code", name: "$name", count: {$sum: 1}} 
    } 
) 

下面是引用:http://docs.mongodb.org/manual/reference/aggregation/

当然最高效和最简单的方法解决此问题的方法是以NoSQL方式设计模式以避免这些查询:http://www.mongodb.org/display/DOCS/Schema+Design我不知道您当前的模式,但如果您希望频繁地执行查询,它可能不是NoSQL的方向。

0

Mongo db没有count像sql那样。

计数 MongoDB中的作品更像计数,你会做一个列表阵列

我劝你要小心计数 MongoDB中,因为它们是缓慢的操作上。

,而不是做计数如您在SQL,我劝你把其中持有列表的元素数量的一个领域,不在名单上的每个你需要的元素的数量从时间使用计数

编辑:

要获得你想你需要使用一个地图结果/减少

http://www.mongovue.com/2010/11/03/yet-another-mongodb-map-reduce-tutorial/

但请记住,这是一个更慢的操作,不打算使用的实时,但更多以周期性后台运行任务