使用php+mongodb的使用者很多,因為mongodb對非結構化資料的儲存很方便。在php5及以前,官方提供了兩個擴充套件,mongo
和mongodb
,其中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...