当通过phpDriver插入时,Mongodb中的长度为2.6

当通过phpDriver插入时,Mongodb中的长度为2.6,php,mongodb,Php,Mongodb,当您在Mongo2.6中执行类似操作时,db.test.insert({a:1,b:[2,3]})您将得到{“\u id”:ObjectId(“…”,“a”:3,“b”:[2,3]}。没什么意外 当我使用1.4.5驱动程序在mongo2.4.10中通过php执行类似操作时: $test->insert([ 'a' => 1, 'b' => [2 ,3] ]) 我仍然得到同样的正常数字。但是,当我在mongo2.6.0中执行类似操作时,结果是不同的: { "_id"

当您在Mongo2.6中执行类似操作时,
db.test.insert({a:1,b:[2,3]})
您将得到
{“\u id”:ObjectId(“…”,“a”:3,“b”:[2,3]}
。没什么意外

当我使用
1.4.5驱动程序在
mongo2.4.10
中通过php执行类似操作时:

$test->insert([
 'a' => 1,
 'b' => [2 ,3]
])
我仍然得到同样的正常数字。但是,当我在
mongo2.6.0
中执行类似操作时,结果是不同的:

{
    "_id" : ObjectId("534a...567"),
    "a" : NumberLong(1),
    "b" : [
        NumberLong(2),
        NumberLong(3)
    ]
}
如您所见,这些数字被转换为
NumberLong
。这也是同一个整数(只是它可以大得多),我不希望出现这种情况,因为a)在shell中读取的时间更长,b)我所有的数字都在
100000
以下,因此没有必要将numberLong放在那里


我正在使用
PHP5.5.10
mongoDriver 1.5.1

以下是我对它的调查:

MongoShell默认使用32位数字,因此我在控制台中看到这些普通数字。以前默认情况下,使用phpDriver插入的所有值均为32位

我假设这是在驱动程序中更改的,默认情况下,现在它假设值为64位。通过使用手动执行此操作,可以恢复正常行为

这将在shell中将所有内容保存为正确的短数字。仍在寻找更好的解决方案

实际上,仔细查看我的
phpinfo()
我发现它有下面一行
mongo.native\u long
,值是
1
。实际上,这迫使驱动程序将所有内容保存为。并查看以下文档:

在1.5.0中,此操作的默认行为已更改为TRUE,因此 确保将此变量设置为所需的值(可能为TRUE) 这样司机的行为就不会在你 升级

所以实际上这是在
1.5.0
中更改的,要将其设置回原位,我只需将其更改为
FALSE

要执行此操作,请转到您的
php.ini
mongo.ini
并添加/更改行
mongo.native\u long=0

$test->insert([
    'a' => new MongoInt32(1),
    'b' => [new MongoInt32(2), new MongoInt32(3)]
]);