原文博客地址www.xiegaosheng.com/post/view?id=96;
<?php /** * Class MongodbClient * mongod操作类 *如果需要自己也可以改成单例模式 */ class MongodbClient{ protected $mongodb; protected $dbname; protected $collection; protected $bulk; protected $writeConcern; public function __construct($config) { if (!$config['dbname'] || !$config['collection']) { # code... exit('参数错误'); } $this->mongodb = new MongoDB\Driver\Manager("mongodb://localhost:27017"); $this->dbname = $config['dbname']; $this->collection = $config['collection']; $this->bulk = new MongoDB\Driver\BulkWrite(); $this->writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 100); } /** * Created by PhpStorm. * function: query * Description:查询方法 * User: Xiaoxie * Email [email protected].com * @param array $where * @param array $option * @return string * */ public function query($where=[],$option=[]) { $query = new MongoDB\Driver\Query($where,$option); $result = $this->mongodb->executeQuery("$this->dbname.$this->collection", $query); $data = []; if ($result) { # code... foreach ($result as $key => $value) { # code... array_push($data, $value); } } return json_encode($data); } /** * Created by PhpStorm. * function: getCount * Description:获取统计数 * User: Xiaoxie * Email [email protected] * @param array $where * @return int * */ public function getCount($where=[]) { $command = new MongoDB\Driver\Command(['count' => $this->collection,'query'=>$where]); $result = $this->mongodb->executeCommand($this->dbname,$command); $res = $result->toArray(); $cnt = 0; if ($res) { # code... $cnt = $res[0]->n; } return $cnt; } /** * Created by PhpStorm. * function: page * Description:分页数据 * User: Xiaoxie * Email [email protected] * @param array $where * @param int $page * @param int $limit * @return string * */ public function page($where=[],$page=1,$limit=10) { $count = $this->getCount($where); $data['count'] = $count; $endpage = ceil($count/$limit); if ($page>$endpage) { # code... $page = $endpage; }elseif ($page <1) { $page = 1; } $skip = ($page-1)*$limit; $options = [ 'skip'=>$skip, 'limit' => $limit ]; $data['data'] = $this->query($where,$options); $data['page'] = $endpage; return json_encode($data); } /** * Created by PhpStorm. * function: update * Description:更新操作 * User: Xiaoxie * Email [email protected] * @param array $where * @param array $update * @param bool $upsert * @return int|null * */ public function update($where=[],$update=[],$upsert=false) { $this->bulk->update($where,['$set' => $update], ['multi' => true, 'upsert' => $upsert]); $result = $this->mongodb->executeBulkWrite("$this->dbname.$this->collection", $this->bulk, $this->writeConcern); return $result->getModifiedCount(); } /** * Created by PhpStorm. * function: insert * Description:插入 * User: Xiaoxie * Email [email protected] * @param array $data * @return mixed * */ public function insert($data=[]) { $result = $this->bulk->insert($data); return $result->getInsertedCount(); } /** * Created by PhpStorm. * function: delete * Description:删除 * User: Xiaoxie * Email [email protected] * @param array $where * @param int $limit * @return mixed * */ public function delete($where=[],$limit=1) { $result = $this->bulk->delete($where,['limit'=>$limit]); return $result->getDeletedCount(); } } //实例化调用 $action = $_GET['action']?:exit('参数错误'); $page = $_GET['page']?:1; $where = json_decode($_GET['where'],true)?:[]; $limit = $_GET['limit']?:'10'; $data = json_decode($_GET['data'],true)?:[]; $option = json_decode($_GET['option'],true)?:[]; $collection = $_GET['collection']; $mongodb = new MongodbClient(['dbname'=>$dbname,'collection'=>$collection]); if ($action=='getCount') { # code... $data = $mongodb->getCount($where); }elseif($action=='insert') { $data = $mongodb->insert($data); } elseif($action=='update') { $data = $mongodb->update($where,$data); } elseif($action=='delete') { $data = $mongodb->delete($where); } elseif($action=='query') { $data = $mongodb->query($where,$option); }elseif($action=='page') { $data = $mongodb->page($where,$page,$limit); } echo $data; 外部调用的时候只需 127.0.0.1/index.php?action=方法&where=等等参数就会返回json
原文地址:http://blog.51cto.com/11760810/2120456
时间: 2024-10-12 13:00:05