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

溫馨提示×

溫馨提示×

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

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

PHP操作MongoDB時有什么問題

發布時間:2021-08-06 23:42:25 來源:億速云 閱讀:132 作者:chen 欄目:數據庫

本篇內容介紹了“PHP操作MongoDB時有什么問題”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

  MongoDB本身有兩種整數類型,分別是:32位整數和64位整數,但舊版的PHP驅動不管操作系統是32位還是64位,把所有整數都當做32位整數處理,結果導致64位整數被截斷。下面億速云小編來講解下PHP操作MongoDB時有哪些問題?

  PHP操作MongoDB時有哪些問題

  為了在盡可能保持兼容性的前提下解決這個問題,新版PHP驅動加入了mongo.native-long選項,以期在64位操作系統中把整數都當做64位來處理,有興趣的可參考:64-bitintegersinMongoDB。

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

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

  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:

  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沒有實現累加,而是變成了[objectObject],目前,如果必須使用group操作,那么有兩種方法可以緩解這個問題:

  方法一:

  ini_set('mongo.native_long',0);

  PHP操作MongoDB時有哪些問題

  方法二:

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

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

  selectDB('test');

  $map='

  function(){

  emit(this.group_id,this.count);

  }

  ';

  $reduce='

  function(key,values){

  varsum=0;

  for(varindexinvalues){

  sum+=values[index];

  }

  returnsum;

  }

  ';

  $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中GROUPBY和MongoDB中MapReduce的對應關系:

  此外,還有很多資料可供參考,如:MongoDBAggregationIII:Map-ReduceBasics。

“PHP操作MongoDB時有什么問題”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

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

AI

托里县| 江永县| 汝南县| 荃湾区| 化州市| 涟水县| 邛崃市| 江山市| 南昌县| 弋阳县| 华容县| 扶沟县| 方山县| 平遥县| 泾阳县| 滨海县| 五家渠市| 乐清市| 鹤峰县| 隆化县| 龙海市| 阜阳市| 乌兰浩特市| 恭城| 福建省| 茶陵县| 普兰县| 延川县| 师宗县| 闽侯县| 瓦房店市| 长葛市| 兴山县| 沂水县| 固始县| 都兰县| 新和县| 新乡县| 建宁县| 昆明市| 乌拉特中旗|