MongoDB本身有两种整数类型,分别是:32位整数和64位整数,但旧版的PHP驱动不管操作系统是32位还是64位,把所有整数都当做32位整数处理,结果导致64位整数被截断。为了在尽可能保持兼容性的前提下解决这个问题,新版PHP驱动加入了
mongo.native-long选项,以期在64位操作系统中把整数都当做64位来处理,有兴趣的可参考:
64-bit integers in 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',
'map' => $map,
'reduce' => $reduce
));
$result = iterator_to_array($instance->{$result['result']}->find());
var_dump($result);
?>
把大象放冰箱里需要三步,而使用MapReduce仅仅需要Map和Reduce两步即可,这里有一个PDF文档生动的说明了MySQL中GROUP BY和MongoDB中MapReduce的对应关系:
SQL to MongoDB
此外,还有很多资料可供参考,如:MongoDB Aggregation III: Map-Reduce Basics。
说明:软件版本为MongoDB(1.6.5),PECL Mongo(1.1.4)。不同版本结论可能不同。
相关推荐:
SEO已经成为数字营销的核心,如何利用SEO提升网站流量和转化率,含山网站优化推广
为什么要年前做SEO,企业为什么做seo推广 ,云南ai大数据公司
ChatGPT不能用了?了解这一背后的真相及解决方法,ai恐怖头像
“曝光量扩大,助力品牌腾飞的秘密武器”,盐山网站优化免费咨询
“新热度”:引领潮流的力量,如何趋势的脉搏,浙江通用网站建设特点
SEO兼职:如何通过SEO兼职实现收入增长与职业突破,濮阳网站建设官网
ChatGPT宕机恢复时间如何解决用户焦虑与技术背后的故事,ai人工智能写作火山
UCMS:引领智慧医疗新时代,打造数字化健康未来,推广工作谈营销
ChatGPT桌面版无法加载?快速解决方案及常见问题解析,ai媚眼
为什么做抖音seo,为什么做抖音推广 ,描边ai虚线
互联网资源的无限潜力:如何利用数字世界为个人和企业创造价值,信阳网站建设正规公司
seo网站是什么东西,seo网站是什么东西啊 ,ai锯齿消失
AI一键生成文章,写作新境界
AI免费写作一键生成,效率与创意的完美结合
为什么seo这么难,seo难嘛 ,ai宁中则
SEO难吗?揭秘SEO背后的真相,让你轻松上手!,大旺百度网站推广
SEO优化关键技巧:提升网站排名的实战攻略,科大讯飞ai论文写作软件
AI免费生成文章让创作变得轻松自如
SEO快排还有效果吗揭秘快速排名的真相与未来趋势,ai人像波普
seo简介主要写什么,seo主要内容 ,AI弧线这
SEO词的魔力:如何通过关键词优化打破流量瓶颈,免费网站建设高端
SEO找词:如何精准找到高效关键词,提升排名和流量,河源网站优化平台
ChatGPT5.0为什么一直没出来?背后的技术与战略,元宵节ai趣赏月
企业营销:如何在竞争激烈的市场中脱颖而出,美装网站Seo优化
SEO小白必看!从零起步SEO的秘诀,轻松提升网站排名,南京网站运营优化平台
seo要懂些什么,seo主要做什么的 ,小艾艾AI
zblog站群,zblog怎么样 ,欧卡2ai汽车如何使用
SEO优化基础:让你的网站脱颖而出的秘密武器,模仿猫ai
seo逻辑是什么,seo思路 ,语音主播怎么ai写作业
SEO才能:提升网站排名,突破网络营销的核心竞争力,南宁本地seo营销公司
ChatGPT异常了:人工智能的极限与突破,ai and ethics
线上AI写作免费一键生成,轻松提升写作效率,解放创作思维
seo需要什么器械,seo需要什么器械才能做 ,长续航ai纯电汽车
SEO提供:如何通过精准的SEO策略提升网站流量与品牌影响力,刷关键词排名立的火星
seo都有什么问题,seo都有什么问题和答案 ,ai凯旋公主下载
AI智能软件:未来科技的核心力量
ChatGPT国内版:为中国用户量身定制的智能助手,开启AI新纪元,ai文章赚钱
从“官网扒下来”看企业数字化转型的未来,摄影营销策略推广文案
怎么用AI生成文章免费版,高效创作从此开始!
为什么做seo的人很少,为了什么做seo ,ai不负你
ChatGPT中显示已进行一处编辑,但看不到内容?你需要了解的隐藏问题!,ai敲
seo站内优化包括什么营销,seo站内优化操作流程 ,ai 玻璃图标
SEO目的:如何通过精准优化提高网站流量与转化率,百度推广网站关键词
SEO公司核心业务是什么?揭秘提升网站排名的奥秘,写作助手ai一键生成作文在线
洗文章AI:让内容创作变得更智能、更高效
SEO单页网站:助力企业在线营销的一站式解决方案,湖南视频网站优化方式
SEO永远,数字营销的核心力量,广州seo搜索栏内容
SEO排序:如何让你的网页在搜索引擎中脱颖而出,平谷抖音seo推广招聘
SEO费用如何根据预算选择最合适的SEO服务,营销类推广网站
什么是seo行业,seo是什么职业做什么的 ,ai标题字体效果