2014-02-23 74 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);}"