那么PHP驱动真的完全解决了整数问题么?NO!在处理group操作的时候还有BUG:
为了说明问题,我们先来生成一些测试数据:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
ini_set('mongo.native_long', 1);
$instance=newMongo();
$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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
ini_set('mongo.native_long', 1);
$instance=newMongo();
$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);
?>
|
1
|
ini_set('mongo.native_long', 0);
|
1
|
$initial=array('count'=> (float)0);
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
ini_set('mongo.native_long', 1);
$instance=newMongo();
$instance=$instance->selectDB('test');
$map= '
function() {
emit(this.group_id, this.count);
}
';
$reduce= '
function(key, values) {
varsum = 0;
for(varindex in values) {
sum += values[index];
}
returnsum;
}
';
$result=$instance->command(array(
'mapreduce'=>'test',
'map' =>$map,
'reduce' =>$reduce
));
$result= iterator_to_array($instance->{$result['result']}->find());
var_dump($result);
?>
|