Home Backend Development PHP Tutorial Bugs and Strategies for PHP Driver MongoDB Integer Issues_PHP Tutorial

Bugs and Strategies for PHP Driver MongoDB Integer Issues_PHP Tutorial

Jul 13, 2016 am 10:28 AM
bug mongodb php and integer Strategy question drive

The integer problem mentioned in this article is not actually a problem with MongoDB, but a problem with the PHP driver: MongoDB itself has two integer types, namely: 32-bit integer and 64-bit integer, but the old version of PHP Regardless of whether the operating system is 32-bit or 64-bit, the driver treats all integers as 32-bit integers, resulting in 64-bit integers being truncated. In order to solve this problem while maintaining compatibility as much as possible, the new version of the PHP driver has added the mongo.native-long option, in order to treat integers as 64-bit in 64-bit operating systems. Those who are interested can refer to: 64- bit integers in MongoDB.

So does the PHP driver really completely solve the integer problem? NO! There are still bugs when handling group operations:

To illustrate the problem, let’s first generate some test data:

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),

 ));

 }

 ?>

Next let us use the group operation to group according to group_id and calculate the count in summary:

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);

 ?>

The result is different from what was expected. Count did not accumulate, but became [object Object]. Currently, if group operations must be used, there are two methods to alleviate this problem:

ini_set('mongo.native_long', 0);

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

These two methods are expedient measures that treat the symptoms rather than the root cause. Since there is a problem with the implementation of group in the current PHP driver, we will bypass it and use other methods to achieve the same function. This method is MapReduce:

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);

 ?>

It takes three steps to put the elephant in the refrigerator, but using MapReduce only requires two steps, Map and Reduce. Here is a PDF document that vividly illustrates the corresponding relationship between GROUP BY in MySQL and MapReduce in MongoDB:

PHP驱动MongoDB整数问题的BUG和策略  帮客之家

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/814346.htmlTechArticleThe integer problem mentioned in this article is actually not a MongoDB problem, but a PHP driver problem: MongoDB itself has There are two integer types: 32-bit integers and 64-bit integers, but the old version...
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
1 months ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How can you prevent a class from being extended or a method from being overridden in PHP? (final keyword) How can you prevent a class from being extended or a method from being overridden in PHP? (final keyword) Apr 08, 2025 am 12:03 AM

In PHP, the final keyword is used to prevent classes from being inherited and methods being overwritten. 1) When marking the class as final, the class cannot be inherited. 2) When marking the method as final, the method cannot be rewritten by the subclass. Using final keywords ensures the stability and security of your code.

The Future of PHP: Adaptations and Innovations The Future of PHP: Adaptations and Innovations Apr 11, 2025 am 12:01 AM

The future of PHP will be achieved by adapting to new technology trends and introducing innovative features: 1) Adapting to cloud computing, containerization and microservice architectures, supporting Docker and Kubernetes; 2) introducing JIT compilers and enumeration types to improve performance and data processing efficiency; 3) Continuously optimize performance and promote best practices.

PHP vs. Python: Understanding the Differences PHP vs. Python: Understanding the Differences Apr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHP is suitable for web development, with simple syntax and high execution efficiency. 2. Python is suitable for data science and machine learning, with concise syntax and rich libraries.

PHP: Is It Dying or Simply Adapting? PHP: Is It Dying or Simply Adapting? Apr 11, 2025 am 12:13 AM

PHP is not dying, but constantly adapting and evolving. 1) PHP has undergone multiple version iterations since 1994 to adapt to new technology trends. 2) It is currently widely used in e-commerce, content management systems and other fields. 3) PHP8 introduces JIT compiler and other functions to improve performance and modernization. 4) Use OPcache and follow PSR-12 standards to optimize performance and code quality.

Navicat's method to view MongoDB database password Navicat's method to view MongoDB database password Apr 08, 2025 pm 09:39 PM

It is impossible to view MongoDB password directly through Navicat because it is stored as hash values. How to retrieve lost passwords: 1. Reset passwords; 2. Check configuration files (may contain hash values); 3. Check codes (may hardcode passwords).

H5: Tools, Frameworks, and Best Practices H5: Tools, Frameworks, and Best Practices Apr 11, 2025 am 12:11 AM

The tools and frameworks that need to be mastered in H5 development include Vue.js, React and Webpack. 1.Vue.js is suitable for building user interfaces and supports component development. 2.React optimizes page rendering through virtual DOM, suitable for complex applications. 3.Webpack is used for module packaging and optimize resource loading.

Can mysql store pdf Can mysql store pdf Apr 08, 2025 pm 01:48 PM

MySQL cannot directly store PDF files, and can be achieved by storing file paths or hash values ​​of binary data. The core idea is to use a table to store the following fields: ID, file name, file path (or hash value). The file path scheme stores file paths, which are simple and efficient, but depend on the file system for security; the file hash scheme stores the SHA-256 hash value of PDF files, which is more secure and can perform data integrity verification.

Composer Expertise: What Makes Someone Skilled Composer Expertise: What Makes Someone Skilled Apr 11, 2025 pm 12:41 PM

To become proficient when using Composer, you need to master the following skills: 1. Proficient in using composer.json and composer.lock files, 2. Understand how Composer works, 3. Master Composer's command line tools, 4. Understand basic and advanced usage, 5. Familiar with common errors and debugging techniques, 6. Optimize usage and follow best practices.

See all articles