真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

PHP操作MongoDB時的整數(shù)問題怎么解決

這篇文章主要講解了“PHP操作MongoDB時的整數(shù)問題怎么解決”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“PHP操作MongoDB時的整數(shù)問題怎么解決”吧!

創(chuàng)新互聯(lián)服務(wù)項目包括鄉(xiāng)寧網(wǎng)站建設(shè)、鄉(xiāng)寧網(wǎng)站制作、鄉(xiāng)寧網(wǎng)頁制作以及鄉(xiāng)寧網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,鄉(xiāng)寧網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到鄉(xiāng)寧省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

PHP驅(qū)動真的完全解決了整數(shù)問題么?NO!在處理group操作的時候還有BUG:

為了說明問題,我們先來生成一些測試數(shù)據(jù):

selectCollection('test', 'test');

for ($i = 0; $i < 10; $i++) {
    $instance->insert(array(
        'group_id' => rand(1, 5),
        'count'    => rand(1, 5),
    ));
}

?>

下面讓我們使用group操作,根據(jù)group_id分組,匯總計算count:

selectCollection('test', 'test');

$keys = array('group_id' => 1);

$initial = array('count' => 0);

$reduce = '
    function(obj, prev) {
        prev.count += obj.count;
    }
';

$result = $instance->group($keys, $initial, $reduce);

var_dump($result);

?>

結(jié)果和預(yù)想的有出入,count沒有實現(xiàn)累加,而是變成了[object Object],目前,如果必須使用group操作,那么有兩種方法可以緩解這個問題:

方法一:

ini_set('mongo.native_long', 0);

方法二:

$initial = array('count' => (float)0);

這兩種方法都是治標不治本的權(quán)宜之計,既然當前PHP驅(qū)動里group的實現(xiàn)有問題,那我們就繞開它,用其它的方式實現(xiàn)同樣的功能,這個方式就是MapReduce:

selectDB('test');

$map = '
    function() {
        emit(this.group_id, this.count);
    }
';

$reduce = '
    function(key, values) {
        var sum = 0;

        for (var index in values) {
            sum += values[index];
        }

        return sum;
    }
';

$result = $instance->command(array(
    'mapreduce' => 'test',
    'out'       => 'name',
    'map'       => $map,
    'reduce'    => $reduce
));

$result = iterator_to_array($instance->{$result['result']}->find());

var_dump($result);

?>

說明:雖然從表面上看MapReduce要生成一個新的Collection,顯得有些低效,但我們可以定期預(yù)生成它,相當于維護一個緩存表,只要對實時性要求不太高就沒問題。

把大象放冰箱里需要三步,而使用MapReduce僅僅需要Map和Reduce兩步即可,這里有一個PDF文檔生動的說明了MySQL中GROUP BY和MongoDB中MapReduce的對應(yīng)關(guān)系:

PHP操作MongoDB時的整數(shù)問題怎么解決

感謝各位的閱讀,以上就是“PHP操作MongoDB時的整數(shù)問題怎么解決”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對PHP操作MongoDB時的整數(shù)問題怎么解決這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!


網(wǎng)站標題:PHP操作MongoDB時的整數(shù)問題怎么解決
文章分享:http://weahome.cn/article/gijssi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部