日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php mongodb 别名,PHP mongo与mongodb扩展 | 码路春哥

發(fā)布時間:2024/8/1 php 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php mongodb 别名,PHP mongo与mongodb扩展 | 码路春哥 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

區(qū)別

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), 這種一方面需要進行數據修復,另一方面需要堵住入口,避免出現此類問題。這種問題一般是在客戶端發(fā)送的消息\、郵件里有特殊字符導致。

具體參考: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扩展 | 码路春哥的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。