中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP操作MongoDB時的整數問題怎么解決

發布時間:2022-03-25 15:32:11 來源:億速云 閱讀:147 作者:iii 欄目:大數據

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

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

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

<?php

ini_set('mongo.native_long', 1);

$instance = new Mongo();

$instance = $instance->selectCollection('test', 'test');

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

?>

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

<?php

ini_set('mongo.native_long', 1);

$instance = new Mongo();

$instance = $instance->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);

?>

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

方法一:

ini_set('mongo.native_long', 0);

方法二:

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

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

<?php

ini_set('mongo.native_long', 1);

$instance = new Mongo();

$instance = $instance->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,顯得有些低效,但我們可以定期預生成它,相當于維護一個緩存表,只要對實時性要求不太高就沒問題。

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

PHP操作MongoDB時的整數問題怎么解決

感謝各位的閱讀,以上就是“PHP操作MongoDB時的整數問題怎么解決”的內容了,經過本文的學習后,相信大家對PHP操作MongoDB時的整數問題怎么解決這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

延川县| 河源市| 苏尼特左旗| 南陵县| 沾化县| 本溪市| 当雄县| 都兰县| 囊谦县| 永修县| 额敏县| 蒙山县| 仪征市| 曲麻莱县| 宜州市| 城固县| 临湘市| 商水县| 乌拉特前旗| 库伦旗| 孟州市| 会宁县| 清流县| 德州市| 中江县| 华池县| 唐山市| 鄂托克前旗| 怀远县| 西城区| 鹿泉市| 玉田县| 格尔木市| 都兰县| 咸宁市| 东台市| 女性| 新龙县| 白朗县| 安庆市| 同仁县|