当通过phpDriver插入时,Mongodb中的长度为2.6
当您在Mongo2.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"
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)]
]);