公升級PHP7操作MongoDB

2022-07-04 16:00:14 字數 3909 閱讀 7202

使用php+mongodb的使用者很多,因為mongodb對非結構化資料的儲存很方便。在php5及以前,官方提供了兩個擴充套件,mongomongodb,其中mongo是對以mongoclient等幾個核心類為基礎的類群進行操作,封裝得很方便,所以基本上都會選擇mongo擴充套件。

詳情請見官方手冊:

但是隨著php5公升級到php7,官方不再支援mongo擴充套件,只支援mongodb,而php7的效能提公升巨大,讓人無法割捨,所以怎麼把mongo替換成mongodb成為了乙個亟待解決的問題。mongodb引入了命名空間,但是功能封裝非常差,如果非要用原生的擴充套件,幾乎意味著寫原生的 mongo 語句。這種想法很違背 orm 簡化 dbio操作帶來的語法問題而專注邏輯優化的思路。

詳情也可參見官方手冊:

在這種情況之下,mongodb 官方忍不住了,為了方便使用,增加市場占有率,推出了基於mongodb 擴充套件的庫:

該庫的詳細文件見:

如果使用原驅動的話,大致語法如下:

<?php

use mongodb\driver\manager;

use mongodb\driver\bulkwrite;

use mongodb\driver\writeconcern;

use mongodb\driver\query;

use mongodb\driver\command;

class mongodb

$mongoserver .= $config['hostname'];

if ($config['port'])

$mongoserver .= '/' . $config['database'];

$this->mongodb = new manager($mongoserver);

$this->database = $config['database'];

$this->collection = $config['collection'];

$this->bulk = new bulkwrite();

$this->writeconcern = new writeconcern(writeconcern::majority, 100);

}public function query($where = , $option = )

public function count($where = )

return $count;

}public function update($where = , $update = , $upsert = false)

public function insert($data = )

public function delete($where = , $limit = 1)

}

這樣的語法和之前差異太大,改動不方便,換 php mongodb 庫

1.連線

new mongoclient();
new mongodb\client();
2.新增
$collention->insert($array, $options);
$resultone = $collention->insertone($array, $options);//單

$lastid = $resultone->getinsertedid();

$resultmany = $collention->insertmany($array, $options);//多

$count = $resultmany->getinsertedcount();

3.修改
$collention->update($condition, [

'$set' => $values

,[ 'multiple' => true//多條,單條false

]);

$collection->updateone(

['state' => 'ny'],

['$set' => ['country' => 'us']]

);$updateresult = $collection->updatemany(

['state' => 'ny'],

['$set' => ['country' => 'us']]

);$count = $updateresult->getmodifiedcount();

4.查詢
$cursor = $collection->find($condition, [

'name' => true//指定字段

]);$cursor->skip(5);

$cursor->limit(5);

$cursor->sort([

'time' => -1

]);

$cursor = $collection->find($condition, [

'skip' => 5,

'limit' => 5,

'sort' => [

'time' => -1

],//排序

'projection' => [

'name' => 1//指定字段

]]);

5.刪除
$collention->remove($condition, [

'justone' => false//刪單條

]);$collention->remove();//刪所有

$result = $collention->deleteone($condition, $options);

$collention->deletemany($condition, $options);

$result->getdeletedcount();

有些人可能習慣以類似mysql的自增 id 來處理資料,以前可能使用findandmodify()方法來查詢並修改:

$collention->findandmodify([

'_id' => $tablename//我在自增表中用其它的表名作主鍵

], [

'$inc' => ['id' => 1]//自增

], [

'_id' => 0

], [

'new' => 1//返回修改後的結果,預設是修改前的

]);

現在使用 mongodb 庫的話需要修改為:

$collention->findoneandupdate([

'_id' => $tablename

], [

'$inc' => ['id' => 1]

], [

'projection' => ['id' => 1],

'returndocument' => mongodb\operation\findoneandupdate::return_document_after

]);

類似的還有findoneanddelete()

公升級PHP7操作MongoDB

使用php mongodb的使用者很多,因為mongodb對非結構化資料的儲存很方便。在php5及以前,官方提供了兩個擴充套件,mongo和mongodb,其中mongo是對以mongoclient等幾個核心類為基礎的類群進行操作,封裝得很方便,所以基本上都會選擇mongo擴充套件。詳情請見官方手冊...

PHP7操作MongoDB增刪改查

bulkwrite 收集將被傳送到服務端的寫入選項 manager 定義乙個聯結器,連線到資料庫 writeconcern 配置寫入策略,滿足不同寫入需求 executebulkwrite 真正執行寫入 set name 乘風破浪 url www.hewie.cn multi false,upser...

php7 原生mongodb 許可權連線

寫這篇的時候,用的是php7.2.這個版本的php已經廢棄了mongo的類。使用mongodb代替。當然,在框架裡都是整合到activerecord之類的了。變化不明顯。而如果要用純原生的mongodb連線呢.查了一些資料。簡單的使用方式如下。manager new mongodb driver m...