2014-02-23 136 views
0

MongoDB無法獲得總數。PHP mongodb總和查詢

MYSQL:

select sum(play) as toplam from videos 

的MongoDB:

$group = $naytu->db->videos->group(array(), array("toplam" => 0), "function(obj, prev) {prev.toplam = prev.toplam + obj.play - 0;}"); 

結果(的print_r)

Array 
(
[retval] => Array 
    (
     [0] => Array 
      (
       [toplam] => NAN 
      ) 

    ) 

[count] => 78656 
[keys] => 1 
[ok] => 1 
) 

問題出在哪裏?

回答

1

在PHP @Neils答案是:

$mongo->videos->aggregate([ 
    ['$group' => ['_id' => null, 'toplam' => ['$sum' => '$play']]] 
]); 
+0

謝謝:)好的! :) – user3342378

0

group()函數是一種舊式的實現這樣的結果,它也將不工作與分片集合。更好地熟悉aggregate

db.collection.aggregate([ 

    {"$group": { "_id": null, "toplam": {"$sum": "$play"} }} 

]); 

爲你輸出驅動程序將只是一個光標,就像使用find。

PHP Syntax

根據記錄,您的使用似乎是遙遠。如上所述,您只需將相對的JSON轉換爲Dicts,如果這仍然是問題,那麼請使用JSON parser向您展示如何。所有的參數都是有效的JSON,所以我提醒自己現在要爲所有示例執行此操作,以便人們可以輕鬆地將其轉換爲自己的語言。

db.collection.group({ 
    "key": {}, 
    "reduce": "function(curr, result) { result.total += curr.play; }", 
    "initial": { "total": 0 } 
}) 

但仍然不要使用這個。堅持彙總,這是一個有用的工具learn

當然在所有案件,使被應用確保所有數據的款項實際上是一個數字,或者事情會炸掉你。

+0

感謝,如何轉換PHP? – user3342378

+0

@ user3342378查看鏈接。谷歌是你的朋友;) –

+0

@ user3342378如果你還在爲此付出努力,編輯應該會對你有所幫助。 –

0

也許這可以幫助

"function(obj, prev) {prev.toplam = new NumberInt(prev.toplam) + new NumberInt(obj.play);}"