2012-11-16 28 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/

但請記住,這是一個更慢的操作,不打算使用的實時,但更多以週期性後臺運行任務