php mongodb 别名,PHP mongo与mongodb扩展 | 码路春哥
區別
mongo擴展
擴展名是mongo.so,是一個比較老的mongodb擴展,主要用于在PHP5.X使用。建議PHP5.4及以后版本使用mongdb擴展,PHP7以后無法無法使用該擴展。該擴展官方已經不在支持。
PECL地址:https://pecl.php.net/package/mongo
使用方法介紹:http://php.net/manual/en/book.mongo.php
mongodb擴展
擴展名是mongodb.so,是目前官方維護的版本。可以直接使用該驅動,但是官方建議和PHPLIB一起使用,PHPLIB封裝了一個功能更加全面的API。
PECL地址:https://pecl.php.net/package/mongodb
PHPLIB地址:https://github.com/mongodb/mongo-php-library
使用方法介紹:http://php.net/manual/en/set.mongodb.php
mongo擴展版本對應PHP版本
PHP Driver
PHP 5.3
PHP 5.4
PHP 5.5
PHP 5.6
PHP 7.0
PHP 7.1
PHP 7.2
mongodb-1.4
?
?
?
?
?
mongodb-1.3
?
?
?
?
?
mongodb-1.2
?
?
?
?
?
mongodb-1.1
?
?
?
?
?
mongodb-1.0
?
?
?
mongo-1.6
?
?
?
?
mongo-1.5
?
?
?
?
mongo-1.4
?
?
?
mongo-1.3
?
?
?
mongo擴展版本對應mongodb的版本
PHP Driver
MongoDB 2.6
MongoDB 3.0
MongoDB 3.2
MongoDB 3.4
MongoDB 3.6
PHPLIB 1.3 + mongodb-1.4
?
S?
?
?
?
PHPLIB 1.2 + mongodb-1.3
?
?
?
?
PHPLIB 1.1 + mongodb-1.2
?
?
?
?
PHPLIB 1.0 + mongodb-1.1
?
?
?
mongodb-1.0
?
?
mongo-1.6
?
?
mongo-1.5
?
mongo-1.4
?
升級注意事項
PHP7只支持mongodb擴展,所以要進行遷移工作,這個是升級PHP7過程中工作量比較大的一個任務。升級過程中有幾點需要注意
mongodb只有長連接
mongo擴展有close()方法,PHP5.X為了保證mongodb長連接數量不至于過多,并且為了避免出現No candidate servers found(具體參考之前寫的文章),每次在請求完調用該方法。但是使用mongodb擴展后,默認使用的是長連接,而且沒有close()方法,所以遷移時要評估改成長連后的mongodb單臺server的連接數,一般是單臺php-fpm數量*機器數。
MongoId vs ObjectId
用到mongodb _id字段的時候,需要注意mongo用的是MongoId,MongoDB\BSON\ObjectId,數據格式有所變化。原來是$id,現在變成了oid字段。
var_dump(new MongoId());
//result
object(MongoId)#1 (1) {
["$id"]=>
string(24) "5b7a95522005564e3d8b4567"
}
var_dump(new MongoDB\BSON\ObjectId());
//result
object(MongoDB\BSON\ObjectId)#1 (1) {
["oid"]=>
string(24) "5b7a9599f6fd4c3d8e0c5611"
}
UTF-8編碼兼容性問題
如果有非UTF-8編碼的數據用mongo擴展可以讀出來,用mongodb擴展讀可能會拋異常(Detected corrupt BSON data), 這種一方面需要進行數據修復,另一方面需要堵住入口,避免出現此類問題。這種問題一般是在客戶端發送的消息\、郵件里有特殊字符導致。
具體參考:https://github.com/mongodb/mongo-php-driver/pull/776
關于返回值的差異
mongodb擴展isAcknowledged返回true不是代表成功,只是標識網絡是OK的
mongodb里成功可以根據update,insert,remove具體操作對應的getModifiedCount, getInsertedCount, getDeletedCount等具體數量判斷。
mongo update判斷更新成功(生效)updatedExisting,但是mongodb 判斷update是否成功建議用getMatchedCount,不能用getModifiedCount。舉例,如果更新的內容并沒有導致變化,updatedExisting返回1,getModifiedCount返回0,getMatchedCount返回1。
WriteConcern
mongo擴展里這部分是在增刪改查的接口里設置(insert,update,remove等),但是在mongodb擴展里,在MongoDB\Driver\WriteConcern里指定,然后作為executeBulkWrite的參數。
更新multiple VS multi
更新時,需要指定是否更新匹配的所有記錄,如果設置為false,表示只更新匹配到的一行。這個坑很大,mongo擴展里指定字段名為multiple,而mongodb擴展里使用的字段是multi。
總結
以上是生活随笔為你收集整理的php mongodb 别名,PHP mongo与mongodb扩展 | 码路春哥的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: php简述一下并集交集差集,总结了一下j
- 下一篇: 求组合数的算法 java,求一个整数的组
