设为首页 收藏本站
查看: 918|回复: 0

[经验分享] 工作中使用mongodb

[复制链接]

尚未签到

发表于 2017-12-15 11:00:35 | 显示全部楼层 |阅读模式
<?php  

  
namespace BI\Service\MongoDB;
  

  
use MongoDB\Driver\BulkWrite;
  
use MongoDB\Driver\Exception\Exception;
  
use MongoDB\Driver\Manager;
  
use MongoDB\Driver\Query;
  
use MongoDB\Driver\WriteConcern;
  
use MongoDB\Driver\WriteResult;
  
use MongoException;
  


  
>  
{
  
     private $mongoManager;
  
     private $db;
  

  
     function __construct($mongoDBConfig)
  
     {
  
         $connectString = 'mongodb://';
  
         if($mongoDBConfig['user'] && $mongoDBConfig['pass'])
  
             $connectString .= $mongoDBConfig['user'] . ':' . $mongoDBConfig['pass'] . '@';
  
         $connectString .= $mongoDBConfig['host'] . ':' . $mongoDBConfig['port'] . '/' . $mongoDBConfig['db'];
  
         $this->mongoManager = new Manager($connectString);
  
         $this->db = $mongoDBConfig['db'];
  
     }
  

  

  
     /**
  
      * @param string $collection
  
      * @param array $filter
  
      * @param array $options
  
      * @return array
  
      */
  
     public function executeQuery($collection, $filter = array(), $options = array()){
  
         $query = new Query($filter, $options);
  
         return $this->mongoManager->executeQuery($this->db . '.' . $collection, $query)->toArray();
  
     }
  

  
     /**
  
      * @param string $collection
  
      * @param BulkWrite $bulkWrite
  
      * @return WriteResult
  
      */
  
     public function executeBulkWrite($collection, $bulkWrite){
  
         return $this->mongoManager->executeBulkWrite($this->db . '.' . $collection, $bulkWrite);
  
     }
  

  
     /**
  
      * @param $doc
  
      * @param string $collection
  
      * @param bool $fetched
  
      * @return WriteResult
  
      */
  
     public function insertData($doc, $collection, $fetched = FALSE) {
  
         // do checking
  
         if (empty($doc) || $collection === NULL) {
  
             return false;
  
         }
  

  
         // save data information
  
         try {
  
             //$wc = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY);
  

  
             $bulk = new BulkWrite();
  
             $insertedId = $bulk->insert($doc);
  
             $this->mongoManager->executeBulkWrite($this->db . '.' . $collection, $bulk);
  

  
             //throw new MongoException('insert data failed');
  

  
             if ($fetched) { return $insertedId; }
  
         }
  
         catch (Exception $e) {
  
             $this->throwError($e->getMessage());
  
         }
  
     }
  

  
     /**
  
      * Update records
  
      * @param $collection
  
      * @param $filter
  
      * @param $updated
  
      * @param $options
  
      * @return WriteResult
  
      */
  
     public function updateData($collection, $filter, $updated, $options = array()) {
  
         // do checking
  
         if ($collection === NULL || empty($updated) || empty($filter)) {
  
             $this->throwError('Updated data can not be empty!');
  
         }
  

  
         // do updating
  
         $timeout = 3000;
  
         $wc = new WriteConcern(WriteConcern::MAJORITY, $timeout);
  
         $bulk = new BulkWrite();
  
         $bulk->update($filter, $updated, $options);
  
         try {
  
             // execute
  
             return $this->mongoManager->executeBulkWrite("{$this->db}.$collection", $bulk, $wc);
  

  
             // throw new MongoException('find record failed');
  
         }
  
         catch (\MongoException $e) {
  
             $this->throwError($e->getMessage());
  
         }
  
     }
  

  
     /**
  
      * Delete record
  
      * @param $collection
  
      * @param $filter
  
      * @param $options
  
      * @return number of rows affected
  
      */
  
     public function deleteData($collection, $filter, $options=array()) {
  
         // do checking
  
         if ($collection === NULL) {
  
             $this->throwError('Inserted data can not be empty!');
  
         }
  

  
         if (!($filter)) {
  
             $this->throwError('$filter format is invaild.');
  
         }
  

  
         try {
  
             // execute
  
             $bulk = new BulkWrite();
  
             $bulk->delete($filter, $options);
  
             $WriteResult = $this->mongoManager->executeBulkWrite("{$this->db}.$collection", $bulk);
  
             return $WriteResult->getDeletedCount();
  

  
             // throw new MongoException('delete record failed');
  
         }
  
         catch (MongoException $e) {
  
             $this->throwError($e->getMessage());
  
         }
  
     }
  

  
     /**
  
      * throw error message
  
      * @param string $errorInfo error message
  
      */
  
     private function throwError($errorInfo='') {
  
         echo "<h3>Error:$errorInfo</h3>";
  
     }
  
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-424310-1-1.html 上篇帖子: 【 W H Y 下篇帖子: Linux下启动mongodb
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表