欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【PHP操作MongoDB时的整数问题及对策】,下面是详细的分享!
PHP操作MongoDB时的整数问题及对策
本文所说的整数问题,其实并不是MongoDB的问题,而是PHP驱动的问题:MongoDB本身有两种整数类型,分别是:32位整数和64位整数,但旧版的PHP驱动不管操作系统是32位还是64位,把所有整数都当做32位整数处理,结果导致64位整数被截断。为了在尽可能保持兼容性的前提下解决这个问题,新版PHP驱动加入了mongo.native-long选项,以期在64位操作系统中把整数都当做64位来处理,有兴趣的可参考:64-bit integers in MongoDB。
那么PHP驱动真的完全解决了整数问题么?NO!在处理group操作的时候还有BUG:
为了说明问题,我们先来生成一些测试数据:
|
|
下面让我们使用group操作,根据group_id分组,汇总计算count:
|
|
结果和预想的有出入,count没有实现累加,而是变成了[object Object],目前,如果必须使用group操作,那么有两种方法可以缓解这个问题:
|
|
|
|
这两种方法都是治标不治本的权宜之计,既然当前PHP驱动里group的实现有问题,那我们就绕开它,用其它的方式实现同样的功能,这个方式就是MapReduce:
|
|
把大象放冰箱里需要三步,而使用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)。不同版本结论可能不同。
以上所分享的是关于PHP操作MongoDB时的整数问题及对策,下面是编辑为你推荐的有价值的用户互动:
相关问题:使用php is _int() 判断是否为整数的问题
答:is_int 判断变量类型是否为整数类型。 语法: int is_int(mixed var); 返回值: 整数 函数种类: PHP 系统功能 内容说明 若变量为整数类型则返回 true,否则返回 false。 你要确保$a这个变量是一个 整数类型的值 >>详细
相关问题:php判断整数问题is_int不好使
答:设两个数的和为a 将两个数的和取整,假设取整后为b 如果a-b=0,那么两个数的和为整数,否则不是 >>详细
相关问题:php操作mongoDB数据库查询的时候怎样写“或”这样的...
答:据我所知,目前mongoDB没有“或”这个东西 但我刚才在网上查了下 发现了下面的信息,你参考下吧 在mongodb中有$or 操作符的,官网中给出的例子如下: Simple: db.foo.find( { $or : [ { a : 1 } , { b : 2 } ] } ) With another field db.foo.find... >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
